You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1 lines
7.0 MiB

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3-selection/src/matcher.js","webpack:///./node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3-selection/src/selection/join.js","webpack:///./node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3-selection/src/selection/datum.js","webpack:///./node_modules/d3-selection/src/select.js","webpack:///./node_modules/d3-selection/src/create.js","webpack:///./node_modules/d3-selection/src/local.js","webpack:///./node_modules/d3-selection/src/sourceEvent.js","webpack:///./node_modules/d3-selection/src/point.js","webpack:///./node_modules/d3-selection/src/mouse.js","webpack:///./node_modules/d3-selection/src/selectAll.js","webpack:///./node_modules/d3-selection/src/touch.js","webpack:///./node_modules/d3-selection/src/touches.js","webpack:///./node_modules/d3-selection/src/index.js","webpack:///./node_modules/d3-array/src/ascending.js","webpack:///./node_modules/d3-array/src/bisector.js","webpack:///./node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3-array/src/pairs.js","webpack:///./node_modules/d3-array/src/cross.js","webpack:///./node_modules/d3-array/src/descending.js","webpack:///./node_modules/d3-array/src/number.js","webpack:///./node_modules/d3-array/src/variance.js","webpack:///./node_modules/d3-array/src/deviation.js","webpack:///./node_modules/d3-array/src/extent.js","webpack:///./node_modules/d3-array/src/array.js","webpack:///./node_modules/d3-array/src/constant.js","webpack:///./node_modules/d3-array/src/identity.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3-array/src/threshold/sturges.js","webpack:///./node_modules/d3-array/src/histogram.js","webpack:///./node_modules/d3-array/src/quantile.js","webpack:///./node_modules/d3-array/src/threshold/freedmanDiaconis.js","webpack:///./node_modules/d3-array/src/threshold/scott.js","webpack:///./node_modules/d3-array/src/max.js","webpack:///./node_modules/d3-array/src/mean.js","webpack:///./node_modules/d3-array/src/median.js","webpack:///./node_modules/d3-array/src/merge.js","webpack:///./node_modules/d3-array/src/min.js","webpack:///./node_modules/d3-array/src/permute.js","webpack:///./node_modules/d3-array/src/scan.js","webpack:///./node_modules/d3-array/src/shuffle.js","webpack:///./node_modules/d3-array/src/sum.js","webpack:///./node_modules/d3-array/src/transpose.js","webpack:///./node_modules/d3-array/src/zip.js","webpack:///./node_modules/d3-array/src/index.js","webpack:///./node_modules/d3/dist/package.js","webpack:///./node_modules/d3-axis/src/array.js","webpack:///./node_modules/d3-axis/src/identity.js","webpack:///./node_modules/d3-axis/src/axis.js","webpack:///./node_modules/d3-drag/src/noevent.js","webpack:///./node_modules/d3-drag/src/nodrag.js","webpack:///./node_modules/d3-drag/src/constant.js","webpack:///./node_modules/d3-drag/src/event.js","webpack:///./node_modules/d3-drag/src/drag.js","webpack:///./node_modules/d3-brush/src/constant.js","webpack:///./node_modules/d3-brush/src/event.js","webpack:///./node_modules/d3-brush/src/noevent.js","webpack:///./node_modules/d3-brush/src/brush.js","webpack:///./node_modules/d3-chord/src/math.js","webpack:///./node_modules/d3-chord/src/chord.js","webpack:///./node_modules/d3-chord/src/array.js","webpack:///./node_modules/d3-chord/src/constant.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-chord/src/ribbon.js","webpack:///./node_modules/d3-contour/src/array.js","webpack:///./node_modules/d3-contour/src/ascending.js","webpack:///./node_modules/d3-contour/src/area.js","webpack:///./node_modules/d3-contour/src/constant.js","webpack:///./node_modules/d3-contour/src/contains.js","webpack:///./node_modules/d3-contour/src/noop.js","webpack:///./node_modules/d3-contour/src/contours.js","webpack:///./node_modules/d3-contour/src/blur.js","webpack:///./node_modules/d3-contour/src/density.js","webpack:///./node_modules/d3-dsv/src/dsv.js","webpack:///./node_modules/d3-dsv/src/csv.js","webpack:///./node_modules/d3-dsv/src/tsv.js","webpack:///./node_modules/d3-dsv/src/autoType.js","webpack:///./node_modules/d3-fetch/src/blob.js","webpack:///./node_modules/d3-fetch/src/buffer.js","webpack:///./node_modules/d3-fetch/src/text.js","webpack:///./node_modules/d3-fetch/src/dsv.js","webpack:///./node_modules/d3-fetch/src/image.js","webpack:///./node_modules/d3-fetch/src/json.js","webpack:///./node_modules/d3-fetch/src/xml.js","webpack:///./node_modules/d3-force/src/center.js","webpack:///./node_modules/d3-force/src/constant.js","webpack:///./node_modules/d3-force/src/jiggle.js","webpack:///./node_modules/d3-quadtree/src/add.js","webpack:///./node_modules/d3-quadtree/src/cover.js","webpack:///./node_modules/d3-quadtree/src/quad.js","webpack:///./node_modules/d3-quadtree/src/x.js","webpack:///./node_modules/d3-quadtree/src/y.js","webpack:///./node_modules/d3-quadtree/src/quadtree.js","webpack:///./node_modules/d3-force/src/collide.js","webpack:///./node_modules/d3-quadtree/src/data.js","webpack:///./node_modules/d3-quadtree/src/extent.js","webpack:///./node_modules/d3-quadtree/src/find.js","webpack:///./node_modules/d3-quadtree/src/remove.js","webpack:///./node_modules/d3-quadtree/src/root.js","webpack:///./node_modules/d3-quadtree/src/size.js","webpack:///./node_modules/d3-quadtree/src/visit.js","webpack:///./node_modules/d3-quadtree/src/visitAfter.js","webpack:///./node_modules/d3-force/src/link.js","webpack:///./node_modules/d3-force/src/simulation.js","webpack:///./node_modules/d3-force/src/manyBody.js","webpack:///./node_modules/d3-force/src/radial.js","webpack:///./node_modules/d3-force/src/x.js","webpack:///./node_modules/d3-force/src/y.js","webpack:///./node_modules/d3-geo/src/adder.js","webpack:///./node_modules/d3-geo/src/math.js","webpack:///./node_modules/d3-geo/src/noop.js","webpack:///./node_modules/d3-geo/src/stream.js","webpack:///./node_modules/d3-geo/src/area.js","webpack:///./node_modules/d3-geo/src/cartesian.js","webpack:///./node_modules/d3-geo/src/bounds.js","webpack:///./node_modules/d3-geo/src/centroid.js","webpack:///./node_modules/d3-geo/src/constant.js","webpack:///./node_modules/d3-geo/src/compose.js","webpack:///./node_modules/d3-geo/src/rotation.js","webpack:///./node_modules/d3-geo/src/circle.js","webpack:///./node_modules/d3-geo/src/clip/buffer.js","webpack:///./node_modules/d3-geo/src/pointEqual.js","webpack:///./node_modules/d3-geo/src/clip/rejoin.js","webpack:///./node_modules/d3-geo/src/polygonContains.js","webpack:///./node_modules/d3-geo/src/clip/index.js","webpack:///./node_modules/d3-geo/src/clip/antimeridian.js","webpack:///./node_modules/d3-geo/src/clip/circle.js","webpack:///./node_modules/d3-geo/src/clip/line.js","webpack:///./node_modules/d3-geo/src/clip/rectangle.js","webpack:///./node_modules/d3-geo/src/clip/extent.js","webpack:///./node_modules/d3-geo/src/length.js","webpack:///./node_modules/d3-geo/src/distance.js","webpack:///./node_modules/d3-geo/src/contains.js","webpack:///./node_modules/d3-geo/src/graticule.js","webpack:///./node_modules/d3-geo/src/interpolate.js","webpack:///./node_modules/d3-geo/src/path/area.js","webpack:///./node_modules/d3-geo/src/identity.js","webpack:///./node_modules/d3-geo/src/path/bounds.js","webpack:///./node_modules/d3-geo/src/path/centroid.js","webpack:///./node_modules/d3-geo/src/path/context.js","webpack:///./node_modules/d3-geo/src/path/measure.js","webpack:///./node_modules/d3-geo/src/path/string.js","webpack:///./node_modules/d3-geo/src/path/index.js","webpack:///./node_modules/d3-geo/src/transform.js","webpack:///./node_modules/d3-geo/src/projection/fit.js","webpack:///./node_modules/d3-geo/src/projection/resample.js","webpack:///./node_modules/d3-geo/src/projection/index.js","webpack:///./node_modules/d3-geo/src/projection/conic.js","webpack:///./node_modules/d3-geo/src/projection/conicEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/cylindricalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/albers.js","webpack:///./node_modules/d3-geo/src/projection/albersUsa.js","webpack:///./node_modules/d3-geo/src/projection/azimuthal.js","webpack:///./node_modules/d3-geo/src/projection/azimuthalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/azimuthalEquidistant.js","webpack:///./node_modules/d3-geo/src/projection/mercator.js","webpack:///./node_modules/d3-geo/src/projection/conicConformal.js","webpack:///./node_modules/d3-geo/src/projection/equirectangular.js","webpack:///./node_modules/d3-geo/src/projection/conicEquidistant.js","webpack:///./node_modules/d3-geo/src/projection/equalEarth.js","webpack:///./node_modules/d3-geo/src/projection/gnomonic.js","webpack:///./node_modules/d3-geo/src/projection/identity.js","webpack:///./node_modules/d3-geo/src/projection/naturalEarth1.js","webpack:///./node_modules/d3-geo/src/projection/orthographic.js","webpack:///./node_modules/d3-geo/src/projection/stereographic.js","webpack:///./node_modules/d3-geo/src/projection/transverseMercator.js","webpack:///./node_modules/d3-hierarchy/src/cluster.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/count.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/index.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/each.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/path.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/links.js","webpack:///./node_modules/d3-hierarchy/src/array.js","webpack:///./node_modules/d3-hierarchy/src/pack/enclose.js","webpack:///./node_modules/d3-hierarchy/src/pack/siblings.js","webpack:///./node_modules/d3-hierarchy/src/accessors.js","webpack:///./node_modules/d3-hierarchy/src/constant.js","webpack:///./node_modules/d3-hierarchy/src/pack/index.js","webpack:///./node_modules/d3-hierarchy/src/treemap/round.js","webpack:///./node_modules/d3-hierarchy/src/treemap/dice.js","webpack:///./node_modules/d3-hierarchy/src/partition.js","webpack:///./node_modules/d3-hierarchy/src/stratify.js","webpack:///./node_modules/d3-hierarchy/src/tree.js","webpack:///./node_modules/d3-hierarchy/src/treemap/slice.js","webpack:///./node_modules/d3-hierarchy/src/treemap/squarify.js","webpack:///./node_modules/d3-hierarchy/src/treemap/index.js","webpack:///./node_modules/d3-hierarchy/src/treemap/binary.js","webpack:///./node_modules/d3-hierarchy/src/treemap/sliceDice.js","webpack:///./node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack:///./node_modules/d3-polygon/src/area.js","webpack:///./node_modules/d3-polygon/src/centroid.js","webpack:///./node_modules/d3-polygon/src/cross.js","webpack:///./node_modules/d3-polygon/src/hull.js","webpack:///./node_modules/d3-polygon/src/contains.js","webpack:///./node_modules/d3-polygon/src/length.js","webpack:///./node_modules/d3-random/src/defaultSource.js","webpack:///./node_modules/d3-random/src/uniform.js","webpack:///./node_modules/d3-random/src/normal.js","webpack:///./node_modules/d3-random/src/logNormal.js","webpack:///./node_modules/d3-random/src/irwinHall.js","webpack:///./node_modules/d3-random/src/bates.js","webpack:///./node_modules/d3-random/src/exponential.js","webpack:///./node_modules/d3-scale-chromatic/src/colors.js","webpack:///./node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack:///./node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack:///./node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack:///./node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack:///./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack:///./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack:///./node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack:///./node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack:///./node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack:///./node_modules/d3-scale-chromatic/src/ramp.js","webpack:///./node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack:///./node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack:///./node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack:///./node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack:///./node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack:///./node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack:///./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack:///./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack:///./node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack:///./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack:///./node_modules/d3-shape/src/constant.js","webpack:///./node_modules/d3-shape/src/math.js","webpack:///./node_modules/d3-shape/src/arc.js","webpack:///./node_modules/d3-shape/src/curve/linear.js","webpack:///./node_modules/d3-shape/src/point.js","webpack:///./node_modules/d3-shape/src/line.js","webpack:///./node_modules/d3-shape/src/area.js","webpack:///./node_modules/d3-shape/src/descending.js","webpack:///./node_modules/d3-shape/src/identity.js","webpack:///./node_modules/d3-shape/src/pie.js","webpack:///./node_modules/d3-shape/src/curve/radial.js","webpack:///./node_modules/d3-shape/src/lineRadial.js","webpack:///./node_modules/d3-shape/src/areaRadial.js","webpack:///./node_modules/d3-shape/src/pointRadial.js","webpack:///./node_modules/d3-shape/src/array.js","webpack:///./node_modules/d3-shape/src/link/index.js","webpack:///./node_modules/d3-shape/src/symbol/circle.js","webpack:///./node_modules/d3-shape/src/symbol/cross.js","webpack:///./node_modules/d3-shape/src/symbol/diamond.js","webpack:///./node_modules/d3-shape/src/symbol/star.js","webpack:///./node_modules/d3-shape/src/symbol/square.js","webpack:///./node_modules/d3-shape/src/symbol/triangle.js","webpack:///./node_modules/d3-shape/src/symbol/wye.js","webpack:///./node_modules/d3-shape/src/symbol.js","webpack:///./node_modules/d3-shape/src/noop.js","webpack:///./node_modules/d3-shape/src/curve/basis.js","webpack:///./node_modules/d3-shape/src/curve/basisClosed.js","webpack:///./node_modules/d3-shape/src/curve/basisOpen.js","webpack:///./node_modules/d3-shape/src/curve/bundle.js","webpack:///./node_modules/d3-shape/src/curve/cardinal.js","webpack:///./node_modules/d3-shape/src/curve/cardinalClosed.js","webpack:///./node_modules/d3-shape/src/curve/cardinalOpen.js","webpack:///./node_modules/d3-shape/src/curve/catmullRom.js","webpack:///./node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack:///./node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack:///./node_modules/d3-shape/src/curve/linearClosed.js","webpack:///./node_modules/d3-shape/src/curve/monotone.js","webpack:///./node_modules/d3-shape/src/curve/natural.js","webpack:///./node_modules/d3-shape/src/curve/step.js","webpack:///./node_modules/d3-shape/src/offset/none.js","webpack:///./node_modules/d3-shape/src/order/none.js","webpack:///./node_modules/d3-shape/src/stack.js","webpack:///./node_modules/d3-shape/src/offset/expand.js","webpack:///./node_modules/d3-shape/src/offset/diverging.js","webpack:///./node_modules/d3-shape/src/offset/silhouette.js","webpack:///./node_modules/d3-shape/src/offset/wiggle.js","webpack:///./node_modules/d3-shape/src/order/appearance.js","webpack:///./node_modules/d3-shape/src/order/ascending.js","webpack:///./node_modules/d3-shape/src/order/descending.js","webpack:///./node_modules/d3-shape/src/order/insideOut.js","webpack:///./node_modules/d3-shape/src/order/reverse.js","webpack:///./node_modules/d3-voronoi/src/constant.js","webpack:///./node_modules/d3-voronoi/src/point.js","webpack:///./node_modules/d3-voronoi/src/RedBlackTree.js","webpack:///./node_modules/d3-voronoi/src/Edge.js","webpack:///./node_modules/d3-voronoi/src/Cell.js","webpack:///./node_modules/d3-voronoi/src/Circle.js","webpack:///./node_modules/d3-voronoi/src/Beach.js","webpack:///./node_modules/d3-voronoi/src/Diagram.js","webpack:///./node_modules/d3-voronoi/src/voronoi.js","webpack:///./node_modules/d3-zoom/src/constant.js","webpack:///./node_modules/d3-zoom/src/event.js","webpack:///./node_modules/d3-zoom/src/transform.js","webpack:///./node_modules/d3-zoom/src/noevent.js","webpack:///./node_modules/d3-zoom/src/zoom.js","webpack:///./node_modules/d3/index.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-time/src/utcMinute.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time/src/index.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/underscore/underscore.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-color/src/math.js","webpack:///./node_modules/d3-color/src/lab.js","webpack:///./node_modules/d3-color/src/cubehelix.js","webpack:///./node_modules/d3-color/src/index.js","webpack:///./node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3-interpolate/src/array.js","webpack:///./node_modules/d3-interpolate/src/date.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3-interpolate/src/object.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3-interpolate/src/value.js","webpack:///./node_modules/d3-interpolate/src/discrete.js","webpack:///./node_modules/d3-interpolate/src/hue.js","webpack:///./node_modules/d3-interpolate/src/round.js","webpack:///./node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3-interpolate/src/zoom.js","webpack:///./node_modules/d3-interpolate/src/hsl.js","webpack:///./node_modules/d3-interpolate/src/lab.js","webpack:///./node_modules/d3-interpolate/src/hcl.js","webpack:///./node_modules/d3-interpolate/src/cubehelix.js","webpack:///./node_modules/d3-interpolate/src/piecewise.js","webpack:///./node_modules/d3-interpolate/src/quantize.js","webpack:///./node_modules/d3-interpolate/src/index.js","webpack:///./node_modules/@phosphor/algorithm/lib/index.js","webpack:///external \"@jupyter-widgets/base\"","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./lib/serialize.js","webpack:///./node_modules/@phosphor/widgets/lib/widget.js","webpack:///./node_modules/@phosphor/messaging/lib/index.js","webpack:///./node_modules/node-libs-browser/node_modules/buffer/index.js","webpack:///./node_modules/@phosphor/domutils/lib/index.js","webpack:///./lib/utils.js","webpack:///./lib/MarkModel.js","webpack:///./lib/Mark.js","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/@phosphor/signaling/lib/index.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3-dispatch/src/index.js","webpack:///./node_modules/d3-transition/src/transition/schedule.js","webpack:///./node_modules/d3-transition/src/interrupt.js","webpack:///./node_modules/d3-transition/src/transition/tween.js","webpack:///./node_modules/d3-transition/src/transition/interpolate.js","webpack:///./node_modules/d3-transition/src/transition/attrTween.js","webpack:///./node_modules/d3-transition/src/transition/delay.js","webpack:///./node_modules/d3-transition/src/transition/duration.js","webpack:///./node_modules/d3-transition/src/transition/ease.js","webpack:///./node_modules/d3-transition/src/transition/on.js","webpack:///./node_modules/d3-transition/src/transition/remove.js","webpack:///./node_modules/d3-transition/src/transition/selection.js","webpack:///./node_modules/d3-transition/src/transition/style.js","webpack:///./node_modules/d3-transition/src/transition/styleTween.js","webpack:///./node_modules/d3-transition/src/transition/text.js","webpack:///./node_modules/d3-transition/src/transition/index.js","webpack:///./node_modules/d3-transition/src/transition/select.js","webpack:///./node_modules/d3-transition/src/transition/selectAll.js","webpack:///./node_modules/d3-transition/src/transition/filter.js","webpack:///./node_modules/d3-transition/src/transition/merge.js","webpack:///./node_modules/d3-transition/src/transition/transition.js","webpack:///./node_modules/d3-transition/src/transition/attr.js","webpack:///./node_modules/d3-transition/src/transition/end.js","webpack:///./node_modules/d3-transition/src/selection/transition.js","webpack:///./node_modules/d3-transition/src/selection/index.js","webpack:///./node_modules/d3-transition/src/selection/interrupt.js","webpack:///./node_modules/d3-transition/src/active.js","webpack:///./node_modules/d3-transition/src/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3-timer/src/timeout.js","webpack:///./node_modules/d3-timer/src/interval.js","webpack:///./node_modules/d3-timer/src/index.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-format/src/formatTrim.js","webpack:///./node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-format/src/formatRounded.js","webpack:///./node_modules/d3-format/src/formatTypes.js","webpack:///./node_modules/d3-format/src/identity.js","webpack:///./node_modules/d3-format/src/locale.js","webpack:///./node_modules/d3-format/src/formatGroup.js","webpack:///./node_modules/d3-format/src/formatNumerals.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-format/src/precisionPrefix.js","webpack:///./node_modules/d3-format/src/precisionRound.js","webpack:///./node_modules/d3-format/src/index.js","webpack:///./lib/version.js","webpack:///./node_modules/@phosphor/algorithm/lib/iter.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/d3-selection-multi/index.js","webpack:///./node_modules/d3-selection-multi/src/selection/attrs.js","webpack:///./node_modules/d3-selection-multi/src/selection/styles.js","webpack:///./node_modules/d3-selection-multi/src/selection/properties.js","webpack:///./node_modules/d3-selection-multi/src/transition/attrs.js","webpack:///./node_modules/d3-selection-multi/src/transition/styles.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/nest.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-collection/src/keys.js","webpack:///./node_modules/d3-collection/src/values.js","webpack:///./node_modules/d3-collection/src/entries.js","webpack:///./node_modules/d3-collection/src/index.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/@phosphor/widgets/lib/layout.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/@phosphor/properties/lib/index.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3-time-format/src/isoFormat.js","webpack:///./node_modules/d3-time-format/src/isoParse.js","webpack:///./node_modules/d3-time-format/src/index.js","webpack:///./node_modules/@phosphor/widgets/lib/boxengine.js","webpack:///./node_modules/@phosphor/widgets/lib/panellayout.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/core-util-is/lib/util.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./lib/Selector.js","webpack:///./lib/Scale.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/@phosphor/widgets/lib/panel.js","webpack:///./node_modules/@phosphor/coreutils/lib/index.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/@phosphor/virtualdom/lib/index.js","webpack:///./node_modules/@phosphor/dragdrop/lib/index.js","webpack:///./lib/Interaction.js","webpack:///./lib/ScaleModel.js","webpack:///./lib/LinearScaleModel.js","webpack:///./lib/Markers.js","webpack:///./node_modules/d3-ease/src/linear.js","webpack:///./node_modules/d3-ease/src/quad.js","webpack:///./node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3-ease/src/poly.js","webpack:///./node_modules/d3-ease/src/sin.js","webpack:///./node_modules/d3-ease/src/exp.js","webpack:///./node_modules/d3-ease/src/circle.js","webpack:///./node_modules/d3-ease/src/bounce.js","webpack:///./node_modules/d3-ease/src/back.js","webpack:///./node_modules/d3-ease/src/elastic.js","webpack:///./node_modules/d3-ease/src/index.js","webpack:///./node_modules/@phosphor/widgets/lib/boxlayout.js","webpack:///./node_modules/@phosphor/widgets/lib/title.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/node-libs-browser/node_modules/events/events.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/des.js/lib/des.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/@phosphor/disposable/lib/index.js","webpack:///./node_modules/@phosphor/keyboard/lib/index.js","webpack:///./node_modules/@phosphor/widgets/lib/tabbar.js","webpack:///./lib/ColorUtils.js","webpack:///./lib/selector_utils.js","webpack:///./lib/LinearScale.js","webpack:///./node_modules/d3-scale/src/init.js","webpack:///./node_modules/d3-scale/src/array.js","webpack:///./node_modules/d3-scale/src/ordinal.js","webpack:///./node_modules/d3-scale/src/band.js","webpack:///./node_modules/d3-scale/src/constant.js","webpack:///./node_modules/d3-scale/src/number.js","webpack:///./node_modules/d3-scale/src/continuous.js","webpack:///./node_modules/d3-scale/src/tickFormat.js","webpack:///./node_modules/d3-scale/src/linear.js","webpack:///./node_modules/d3-scale/src/identity.js","webpack:///./node_modules/d3-scale/src/nice.js","webpack:///./node_modules/d3-scale/src/log.js","webpack:///./node_modules/d3-scale/src/symlog.js","webpack:///./node_modules/d3-scale/src/pow.js","webpack:///./node_modules/d3-scale/src/quantile.js","webpack:///./node_modules/d3-scale/src/quantize.js","webpack:///./node_modules/d3-scale/src/threshold.js","webpack:///./node_modules/d3-scale/src/time.js","webpack:///./node_modules/d3-scale/src/utcTime.js","webpack:///./node_modules/d3-scale/src/sequential.js","webpack:///./node_modules/d3-scale/src/sequentialQuantile.js","webpack:///./node_modules/d3-scale/src/diverging.js","webpack:///./node_modules/d3-scale/src/index.js","webpack:///./lib/Axis.js","webpack:///./node_modules/is-typedarray/index.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/@phosphor/widgets/lib/index.js","webpack:///./node_modules/@phosphor/coreutils/lib/random.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/brorand/index.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/@phosphor/commands/lib/index.js","webpack:///./node_modules/@phosphor/widgets/lib/menu.js","webpack:///./node_modules/@phosphor/widgets/lib/docklayout.js","webpack:///./node_modules/@phosphor/widgets/lib/splitlayout.js","webpack:///./node_modules/@phosphor/widgets/lib/stackedlayout.js","webpack:///./node_modules/@phosphor/widgets/lib/stackedpanel.js","webpack:///./lib/colorbrewer.js","webpack:///./lib/ScatterBase.js","webpack:///./lib/ScatterBaseModel.js","webpack:///./lib/OrdinalScaleModel.js","webpack:///./lib/lasso_test.js","webpack:///./lib/ColorScale.js","webpack:///./lib/ColorScaleModel.js","webpack:///./lib/Lines.js","webpack:///./lib/Figure.js","webpack:///./lib/PopperReference.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/three/build/three.module.js","webpack:///./lib/index-classic.js","webpack:///./css/bqplot.css?f643","webpack:///./css/bqplot.css","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///./node_modules/style-loader/lib/urls.js","webpack:///./lib/index.js","webpack:///./lib/GridHeatMapModel.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/@phosphor/algorithm/lib/array.js","webpack:///./node_modules/@phosphor/algorithm/lib/chain.js","webpack:///./node_modules/@phosphor/algorithm/lib/empty.js","webpack:///./node_modules/@phosphor/algorithm/lib/filter.js","webpack:///./node_modules/@phosphor/algorithm/lib/find.js","webpack:///./node_modules/@phosphor/algorithm/lib/map.js","webpack:///./node_modules/@phosphor/algorithm/lib/range.js","webpack:///./node_modules/@phosphor/algorithm/lib/reduce.js","webpack:///./node_modules/@phosphor/algorithm/lib/repeat.js","webpack:///./node_modules/@phosphor/algorithm/lib/retro.js","webpack:///./node_modules/@phosphor/algorithm/lib/sort.js","webpack:///./node_modules/@phosphor/algorithm/lib/stride.js","webpack:///./node_modules/@phosphor/algorithm/lib/string.js","webpack:///./node_modules/@phosphor/algorithm/lib/take.js","webpack:///./node_modules/@phosphor/algorithm/lib/zip.js","webpack:///./node_modules/@phosphor/collections/lib/index.js","webpack:///./node_modules/@phosphor/collections/lib/linkedlist.js","webpack:///./node_modules/@phosphor/domutils/lib/element.js","webpack:///./node_modules/@phosphor/domutils/lib/platform.js","webpack:///./node_modules/@phosphor/domutils/lib/selector.js","webpack:///./node_modules/@phosphor/widgets/lib/boxpanel.js","webpack:///./node_modules/@phosphor/widgets/lib/commandpalette.js","webpack:///./node_modules/@phosphor/coreutils/lib/json.js","webpack:///./node_modules/@phosphor/coreutils/lib/mime.js","webpack:///./node_modules/@phosphor/coreutils/lib/promise.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/browserify-des/index.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/des.js/lib/des/cbc.js","webpack:///./node_modules/des.js/lib/des/ede.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/hash.js/lib/hash/sha.js","webpack:///./node_modules/hash.js/lib/hash/sha/1.js","webpack:///./node_modules/hash.js/lib/hash/sha/224.js","webpack:///./node_modules/hash.js/lib/hash/sha/384.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///./node_modules/parse-asn1/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/node-libs-browser/node_modules/vm-browserify/index.js","webpack:///./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///./node_modules/asn1.js/lib/asn1/base/node.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/@phosphor/coreutils/lib/token.js","webpack:///./node_modules/@phosphor/coreutils/lib/uuid.js","webpack:///./node_modules/@phosphor/widgets/lib/contextmenu.js","webpack:///./node_modules/@phosphor/widgets/lib/dockpanel.js","webpack:///./node_modules/@phosphor/widgets/lib/focustracker.js","webpack:///./node_modules/@phosphor/widgets/lib/gridlayout.js","webpack:///./node_modules/@phosphor/widgets/lib/menubar.js","webpack:///./node_modules/@phosphor/widgets/lib/scrollbar.js","webpack:///./node_modules/@phosphor/widgets/lib/singletonlayout.js","webpack:///./node_modules/@phosphor/widgets/lib/splitpanel.js","webpack:///./node_modules/@phosphor/widgets/lib/tabpanel.js","webpack:///./lib/AxisModel.js","webpack:///./lib/HandDraw.js","webpack:///./lib/Bars.js","webpack:///./lib/HandDrawModel.js","webpack:///./lib/OHLC.js","webpack:///./lib/BarsModel.js","webpack:///./lib/Hist.js","webpack:///./lib/OHLCModel.js","webpack:///./lib/HistModel.js","webpack:///./lib/SelectorModel.js","webpack:///./lib/Boxplot.js","webpack:///./lib/IndexSelector.js","webpack:///./lib/OrdinalColorScale.js","webpack:///./lib/BoxplotModel.js","webpack:///./lib/OrdinalScale.js","webpack:///./lib/Label.js","webpack:///./lib/LabelModel.js","webpack:///./lib/OrdinalColorScaleModel.js","webpack:///./lib/BrushSelector.js","webpack:///./lib/LassoSelector.js","webpack:///./lib/PanZoom.js","webpack:///./lib/ColorAxis.js","webpack:///./lib/PanZoomModel.js","webpack:///./lib/Pie.js","webpack:///./lib/PieModel.js","webpack:///./lib/DateColorScale.js","webpack:///./lib/DateColorScaleModel.js","webpack:///./lib/DateScale.js","webpack:///./lib/Scatter.js","webpack:///./lib/DateScaleModel.js","webpack:///./lib/LinesModel.js","webpack:///./lib/ScatterModel.js","webpack:///./lib/FastIntervalSelector.js","webpack:///./lib/LogScale.js","webpack:///./shaders/scales.glsl","webpack:///./lib/LogScaleModel.js","webpack:///./lib/FigureModel.js","webpack:///./lib/Map.js","webpack:///./lib/Tooltip.js","webpack:///./lib/TooltipModel.js","webpack:///./lib/FlexLine.js","webpack:///./lib/MapModel.js","webpack:///./node_modules/topojson/build/topojson.js","webpack:///./lib/GeoScale.js","webpack:///./lib/GeoScaleModel.js","webpack:///./lib/MarketMap.js","webpack:///./lib/GridHeatMap.js","webpack:///./lib/MarketMapModel.js","webpack:///./lib/HeatMap.js","webpack:///./lib/HeatMapModel.js","webpack:///./lib/Toolbar.js","webpack:///./lib/GraphModel.js","webpack:///./lib/Graph.js","webpack:///./lib/Image.js","webpack:///./lib/ImageModel.js","webpack:///./lib/ScatterGL.js","webpack:///./shaders/scatter-vertex.glsl","webpack:///./shaders/scatter-fragment.glsl","webpack:///./lib/ScatterGLModel.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","xhtml","namespaces","svg","xlink","xml","xmlns","namespace","prefix","indexOf","slice","space","local","creator","fullname","this","ownerDocument","createElementNS","document","uri","namespaceURI","documentElement","createElement","none","src_selector","selector","querySelector","empty","selectorAll","querySelectorAll","matcher","matches","sparse","update","Array","length","EnterNode","parent","datum","_next","_parent","__data__","constructor","appendChild","child","insertBefore","next","keyPrefix","bindIndex","group","enter","exit","data","node","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","ascending","a","b","NaN","attrRemove","removeAttribute","attrRemoveNS","removeAttributeNS","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","v","apply","arguments","attrFunctionNS","src_window","defaultView","styleRemove","style","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","propertyRemove","propertyConstant","propertyFunction","classArray","string","trim","split","classList","ClassList","_node","_names","getAttribute","classedAdd","names","list","add","classedRemove","remove","classedTrue","classedFalse","classedFunction","push","join","splice","contains","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","parentNode","lower","previousSibling","firstChild","constantNull","removeChild","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","on_event","mouseenter","mouseleave","filterContextListener","listener","index","contextListener","event","related","relatedTarget","compareDocumentPosition","event1","event0","parseTypenames","typenames","map","type","onRemove","typename","on","__on","j","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","that","args","sourceEvent","dispatchEvent","params","window","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","root","Selection","groups","parents","_groups","_parents","selection_selection","select","subgroups","subnode","subgroup","selectAll","filter","match","size","each","x","enterGroup","updateGroup","previous","i0","i1","_enter","_exit","onenter","onupdate","onexit","append","merge","order","selection","groups0","groups1","m0","m1","Math","min","merges","group0","group1","sort","compare","compareNode","sortgroups","sortgroup","callback","nodes","attr","getAttributeNS","classed","text","html","insert","before","clone","deep","dispatch","src_selection","src_select","src_create","nextId","Local","_","toString","id","set","source","current","point","ownerSVGElement","createSVGPoint","clientX","y","clientY","matrixTransform","getScreenCTM","inverse","rect","getBoundingClientRect","left","clientLeft","top","clientTop","mouse","changedTouches","src_selectAll","src_touch","touches","identifier","touch","src_touches","points","__webpack_exports__","bisector","f","lo","hi","mid","right","ascendingBisect","bisectRight","bisectLeft","bisect","pairs","array","pair","cross","values0","values1","reduce","value0","n0","n1","values","descending","number","variance","valueof","delta","mean","sum","isNaN","deviation","sqrt","extent","max","array_array","constant","identity","range","start","stop","step","ceil","e10","e5","e2","ticks","count","reverse","tickIncrement","isFinite","floor","power","log","LN10","error","pow","tickStep","step0","abs","step1","sturges","LN2","src_histogram","domain","threshold","histogram","xz","x0","x1","tz","isArray","shift","pop","bin","bins","thresholds","quantile","freedmanDiaconis","scott","src_max","src_mean","median","numbers","arrays","merged","src_min","permute","indexes","permutes","scan","xi","xj","shuffle","random","src_sum","src_transpose","matrix","transpose_length","transpose","row","zip","axis_top","axis_right","axis_bottom","axis_left","epsilon","translateX","translateY","entering","__axis","axis_axis","orient","scale","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","axis","context","format","spacing","range0","range1","position","bandwidth","offset","round","copy","path","tick","tickExit","tickEnter","line","transition","tickSize","axisTop","axisRight","axisBottom","axisLeft","nopropagation","d3_selection_src","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","yesdrag","noclick","setTimeout","DragEvent","target","subject","active","dx","dy","defaultFilter","button","defaultContainer","defaultSubject","defaultTouchable","src_drag","mousedownx","mousedowny","mousemoving","touchending","container","touchable","gestures","listeners","d3_dispatch_src","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","clearTimeout","sublisteners","p0","clickDistance","src_constant","src_event","noevent_nopropagation","src_noevent","MODE_DRAG","MODE_SPACE","MODE_HANDLE","MODE_CENTER","brush_X","handles","brush_type","input","e","output","xy","brush_Y","XY","cursors","overlay","w","nw","ne","se","sw","flipX","flipY","signsX","signsY","brush_defaultFilter","defaultExtent","width","baseVal","height","__brush","brushSelection","state","dim","brushX","brush_brush","brushY","src_brush","brush","handleSize","initialize","handle","redraw","started","emitter","Emitter","w0","w1","e0","e1","s0","s1","moving","lockX","lockY","metaKey","altKey","signX","signY","W","N","E","S","shifting","shiftKey","point0","emit","moved","ended","keyCode","move","d3_transition_src","point1","end","tween","selection0","selection1","d3_interpolate_src","starting","cos","sin","pi","PI","halfPi","tau","compareValue","src_chord","padAngle","sortGroups","sortSubgroups","sortChords","chord","groupSums","groupIndex","src","subgroupIndex","chords","forEach","di","dj","a0","a1","subindex","startAngle","endAngle","array_slice","d3_chord_src_constant","path_pi","path_tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","path_path","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","Error","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","arc","ccw","cw","da","h","src_path","defaultSource","defaultTarget","defaultRadius","radius","defaultStartAngle","defaultEndAngle","src_ribbon","ribbon","buffer","argv","sr","sa0","sa1","sx0","sy0","tr","ta0","ta1","src_array_slice","src_area","ring","area","d3_contour_src_constant","hole","ringContains","yi","pj","yj","segmentContains","q","collinear","noop","cases","src_contours","smooth","smoothLinear","contours","contour","polygons","holes","t0","t1","t2","t3","fragmentByStart","fragmentByEnd","stitch","g","startIndex","endIndex","concat","unshift","isorings","polygon","coordinates","v0","xt","yt","v1","_0","_1","blurX","blurY","defaultX","defaultY","defaultWeight","src_density","weight","density","Float32Array","wi","geometry","transformPolygon","transformRing","transformPoint","resize","cellSize","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","columns","Function","JSON","stringify","inferColumns","rows","columnSet","column","pad","formatDate","date","year","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","dsv","delimiter","reFormat","RegExp","DELIMITER","charCodeAt","parseRows","I","eof","eol","token","replace","preformatBody","formatValue","formatRow","Date","test","parse","convert","customConverter","formatBody","formatRows","csv","csvParse","csvParseRows","csvFormat","csvFormatBody","csvFormatRows","tsv","tsvParse","tsvParseRows","tsvFormat","tsvFormatBody","tsvFormatRows","autoType","responseBlob","response","ok","status","statusText","blob","init","fetch","then","responseArrayBuffer","arrayBuffer","src_buffer","responseText","src_text","dsvParse","undefined","dsv_dsv","dsv_csv","dsv_tsv","src_image","Promise","resolve","reject","image","Image","onerror","onload","responseJson","json","parser","DOMParser","parseFromString","src_center","force","sx","sy","d3_force_src_constant","jiggle","add_add","tree","xm","ym","xp","yp","bottom","_root","leaf","_x","_y","src_quad","x_defaultX","y_defaultY","quadtree","Quadtree","addAll","leaf_copy","treeProto","collide_x","vx","collide_y","vy","cover","yz","Infinity","z","visit","find","x3","y3","quads","d2","retainer","removeAll","visitAfter","collide","radii","strength","iterations","ri","ri2","prepare","quad","rj","link_index","link_find","nodeById","nodeId","src_link","links","strengths","distances","bias","link","distance","alpha","d3_collection_src","initializeStrength","initializeDistance","simulation_x","simulation_y","initialRadius","initialAngle","src_simulation","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","d3_timer_src","fx","fy","initializeNodes","angle","initializeForce","restart","closest","manyBody","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","theta","radial","radiuses","d3_force_src_x","d3_force_src_y","adder","Adder","reset","adder_add","temp","valueOf","bv","av","math_epsilon","math_pi","math_halfPi","quarterPi","math_tau","degrees","radians","atan","atan2","math_cos","exp","math_sin","math_sign","sign","asin","haversin","noop_noop","streamGeometry","stream","streamGeometryType","streamObjectType","Feature","FeatureCollection","features","Sphere","sphere","Point","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","area_lambda00","phi00","area_lambda0","area_cosPhi0","area_sinPhi0","src_stream","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","u","d3_geo_src_area","cartesian_spherical","cartesian","cartesian_cartesian","spherical","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","bounds_lambda0","bounds_phi0","bounds_lambda1","bounds_phi1","bounds_lambda2","bounds_lambda00","bounds_phi00","bounds_p0","ranges","bounds_range","deltaSum","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","bounds_linePoint","normal","inflection","phii","lambdai","antimeridian","bounds_angle","lambda0","lambda1","rangeCompare","rangeContains","W0","W1","centroid_X0","centroid_Y0","Z0","centroid_X1","centroid_Y1","Z1","X2","Y2","Z2","centroid_lambda00","centroid_phi00","centroid_x0","centroid_y0","z0","bounds","feature","deltaMax","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cx","cy","cz","src_centroid","d3_geo_src_constant","compose","invert","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","src_rotation","rotate","forward","circleStream","direction","cosRadius","sinRadius","circleRadius","src_circle","center","precision","circle","clip_buffer","lines","rejoin","result","pointEqual","Intersection","other","entry","segments","compareIntersection","startInside","interpolate","clip","segment","p1","rejoin_link","isSubject","polygonContains_sum","polygonContains","winding","phi0","sinPhi0","cosPhi0","sinPhi1","cosPhi1","phi1","absDelta","intersection","phiArc","src_clip","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","clip_compareIntersection","pointLine","clean","ringSegments","validSegment","clip_antimeridian","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","from","to","clip_circle","cr","smallRadius","notHemisphere","visible","intersect","two","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","A","uu","polar","q1","code","c0","v00","point2","clip_line","ax","ay","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","cb","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","linePoint","b0","b1","polygonInside","cleanInside","length_lambda0","length_sinPhi0","length_cosPhi0","clip_extent","cache","cacheStream","lengthSum","lengthStream","lengthPointFirst","lengthLineEnd","lengthPoint","cosDelta","src_length","distance_coordinates","distance_object","src_distance","containsObjectType","containsGeometry","containsGeometryType","containsPoint","containsLine","containsPolygon","ab","ringRadians","pointRadians","src_contains","graticuleX","graticuleY","graticule_graticule","X1","X0","Y1","Y0","X","Y","DX","DY","graticule","outline","extentMajor","extentMinor","stepMajor","stepMinor","graticule10","area_x00","area_y00","area_x0","area_y0","src_interpolate","cy0","cy1","sy1","kx0","ky0","kx1","ky1","B","src_identity","area_areaSum","area_areaRingSum","area_areaStream","area_areaRingStart","area_areaRingEnd","area_areaPointFirst","area_areaPoint","path_area","bounds_x0","bounds_y0","bounds_x1","bounds_y1","centroid_x00","centroid_y00","path_centroid_x0","path_centroid_y0","path_bounds","path_centroid_X0","path_centroid_Y0","centroid_Z0","path_centroid_X1","path_centroid_Y1","centroid_Z1","centroid_X2","centroid_Y2","centroid_Z2","centroid_centroidStream","centroid_centroidPoint","centroid_centroidLineStart","centroid_centroidLineEnd","centroid_centroidRingStart","centroid_centroidRingEnd","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","path_centroid","PathContext","_context","_radius","pointRadius","_line","_point","lengthRing","measure_x00","measure_y00","measure_x0","measure_y0","measure_lengthSum","measure_lengthStream","measure_lengthPointFirst","measure_lengthPoint","measure","PathString","_string","string_circle","_circle","d3_geo_src_path","projection","projectionStream","contextStream","src_transform","methods","transformer","TransformStream","fit","fitBounds","clipExtent","translate","fitExtent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","resample","project","delta2","resampleLineTo","depth","phi2","lambda2","dx2","dy2","dz","lambda00","x00","y00","a00","b00","c00","resampleStream","ringPoint","resample_resample","resampleNone","transformRadians","scaleTranslateRotate","cosAlpha","sinAlpha","ai","bi","ci","fi","projection_projection","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","preclip","postclip","recenter","transformRotate","clipAngle","conicProjection","parallels","conicEqualAreaRaw","cylindricalEqualAreaRaw","r0","r0y","conicEqualArea","albers","projection_albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","albersUsa","streams","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEqualArea","azimuthalEquidistantRaw","azimuthalEquidistant","mercatorRaw","mercator","mercatorProjection","reclip","tany","conicConformalRaw","conicConformal","equirectangularRaw","equirectangular","conicEquidistantRaw","gy","nx","conicEquidistant","A1","A2","A3","A4","M","equalEarthRaw","l2","l6","equalEarth","gnomonicRaw","gnomonic","identity_scaleTranslate","kx","ky","tx","ty","projection_identity","reflectX","reflectY","naturalEarth1Raw","phi4","naturalEarth1","orthographicRaw","orthographic","stereographicRaw","stereographic","transverseMercatorRaw","transverseMercator","defaultSeparation","meanXReduce","maxYReduce","cluster","separation","nodeSize","previousNode","eachAfter","children","meanX","maxY","leafLeft","leafRight","count_count","hierarchy","childs","Node","valued","defaultChildren","eachBefore","computeHeight","copyData","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","d3_hierarchy_src_array_slice","enclose","circles","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","r1","r2","r21","r3","a2","a3","b2","b3","c3","d1","d3","xa","xb","ya","yb","C","place","intersects","score","siblings_Node","packEnclose","aa","sj","sk","pack","siblings","optional","required","constantZero","d3_hierarchy_src_constant","pack_defaultRadius","src_pack","padding","radiusLeaf","packChildren","translateChild","treemap_round","dice","src_partition","partition","positionNode","preroot","ambiguous","defaultId","defaultParentId","parentId","src_stratify","stratify","nodeKey","nodeByKey","tree_defaultSeparation","nextLeft","nextRight","moveSubtree","wm","wp","change","nextAncestor","vim","TreeNode","src_tree","treeRoot","firstWalk","secondWalk","sizeNode","executeShifts","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","treemap_slice","squarify_phi","squarifyRatio","ratio","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","beta","squarify","custom","src_treemap","tile","paddingStack","paddingInner","paddingTop","paddingRight","paddingBottom","paddingLeft","treemap","paddingOuter","binary","sums","valueOffset","valueTarget","valueLeft","valueRight","xk","yk","sliceDice","treemap_resquarify","resquarify","_squarify","d3_polygon_src_area","d3_polygon_src_centroid","lexicographicOrder","computeUpperHullIndexes","hull","sortedPoints","flippedPoints","upperIndexes","lowerIndexes","skipLeft","skipRight","d3_polygon_src_contains","inside","d3_polygon_src_length","perimeter","src_defaultSource","uniform","sourceRandomUniform","randomUniform","src_normal","sourceRandomNormal","randomNormal","mu","sigma","logNormal","sourceRandomLogNormal","randomLogNormal","irwinHall","sourceRandomIrwinHall","randomIrwinHall","bates","sourceRandomBates","randomBates","exponential","sourceRandomExponential","randomExponential","colors","specifier","category10","Accent","Dark2","Paired","Pastel1","Pastel2","Set1","Set2","Set3","ramp","scheme","BrBG_scheme","BrBG","PRGn_scheme","PRGn","PiYG_scheme","PiYG","PuOr_scheme","PuOr","RdBu_scheme","RdBu","RdGy_scheme","RdGy","RdYlBu_scheme","RdYlBu","RdYlGn_scheme","RdYlGn","Spectral_scheme","Spectral","BuGn_scheme","BuGn","BuPu_scheme","BuPu","GnBu_scheme","GnBu","OrRd_scheme","OrRd","PuBuGn_scheme","PuBuGn","PuBu_scheme","PuBu","PuRd_scheme","PuRd","RdPu_scheme","RdPu","YlGnBu_scheme","YlGnBu","YlGn_scheme","YlGn","YlOrBr_scheme","YlOrBr","YlOrRd_scheme","YlOrRd","Blues_scheme","Blues","Greens_scheme","Greens","Greys_scheme","Greys","Purples_scheme","Purples","Reds_scheme","Reds","Oranges_scheme","Oranges","cubehelix","d3_color_src","warm","cool","rainbow_c","rainbow","ts","sinebow_c","pi_1_3","pi_2_3","sinebow","viridis_ramp","viridis","magma","inferno","plasma","d3_shape_src_constant","math_abs","math_atan2","src_math_cos","math_max","src_math_sin","math_sqrt","src_math_epsilon","src_math_pi","src_math_halfPi","src_math_tau","math_asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","arcEndAngle","arcPadAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","D","cx0","cx1","dx0","dy0","dx1","dy1","src_arc","cornerRadius","padRadius","a01","a11","a10","da0","da1","ap","rp","rc0","rc1","oc","x32","y32","arc_intersect","bx","by","kc","lc","Linear","areaStart","areaEnd","linear","point_x","point_y","src_line","defined","curve","defined0","d3_shape_src_area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","d3_shape_src_identity","src_pie","sortValues","pie","arcs","pa","curveRadialLinear","curveRadial","Radial","_curve","lineRadial","src_lineRadial","areaRadial","lineStartAngle","lineEndAngle","lineInnerRadius","lineOuterRadius","pointRadial","d3_shape_src_array_slice","linkSource","linkTarget","link_link","curveHorizontal","curveVertical","link_curveRadial","p2","p3","linkHorizontal","linkVertical","linkRadial","symbol_circle","draw","symbol_cross","tan30","tan30_2","diamond","kr","star_kx","star_ky","star","square","sqrt3","triangle","wye_s","wye_k","wye_a","wye","symbols","src_symbol","symbol","src_noop","basis_point","Basis","basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","basisClosed","BasisOpen","basisOpen","Bundle","_basis","_beta","curve_bundle","bundle","cardinal_point","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","cardinalClosed","CardinalOpen","cardinalOpen","catmullRom_point","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","curve_catmullRom","catmullRom","CatmullRomClosed","catmullRomClosed","CatmullRomOpen","catmullRomOpen","LinearClosed","linearClosed","monotone_sign","slope3","h0","h1","slope2","monotone_point","MonotoneX","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","controlPoints","_t0","px","py","natural","Step","_t","curve_step","stepBefore","stepAfter","series","order_none","stackValue","src_stack","keys","stack","oz","kz","sz","sij","ki","si","expand","diverging","yn","silhouette","wiggle","s2","sij0","s3","appearance","peaks","peak","vi","vj","order_ascending","ascending_sum","order_descending","insideOut","tops","bottoms","d3_voronoi_src_constant","src_point_x","src_point_y","RedBlackTree","RedBlackNode","U","L","R","P","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","red","src_RedBlackTree","createEdge","edge","Diagram_edges","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","connectEdge","fm","fb","lx","ly","rx","ry","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","Circle","attachCircle","lArc","rArc","lSite","cSite","rSite","Diagram_epsilon2","ha","hc","Diagram_circles","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","Diagram_epsilon","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","lexicographic","Diagram","sites","sortCellHalfedges","clipEdges","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","dc","v01","v11","v10","clipCells","edges","triangles","_found","v2","src_voronoi","voronoi","d3_zoom_src_constant","ZoomEvent","Transform","applyX","applyY","location","invertX","invertY","rescaleX","rescaleY","transform_identity","transform_transform","__zoom","src_noevent_nopropagation","d3_zoom_src_noevent","zoom_defaultFilter","zoom_defaultExtent","SVGElement","clientWidth","clientHeight","defaultTransform","defaultWheelDelta","deltaY","deltaMode","zoom_defaultTouchable","defaultConstrain","translateExtent","src_zoom","touchstarting","constrain","wheelDelta","scaleExtent","duration","touchDelay","wheelDelay","zoom","wheeled","dblclicked","schedule","Gesture","wheel","k1","touch0","touch1","l0","l1","dp","dl","collection","interrupt","scaleBy","scaleTo","k0","translateBy","translateTo","d3_ease_src","d3_format_src","d3_scale_src","d3_time_src","d3_time_format_src","newInterval","floori","offseti","field","interval","d0","setTime","every","millisecond","src_millisecond","durationMinute","durationWeek","second","getMilliseconds","src_second","minute","getSeconds","getMinutes","src_minute","hour","getHours","src_hour","day","setHours","setDate","getDate","getTimezoneOffset","src_day","days","weekday","getDay","sunday","monday","tuesday","wednesday","thursday","friday","saturday","sundays","mondays","tuesdays","wednesdays","thursdays","fridays","saturdays","month","setMonth","getMonth","getFullYear","src_month","months","setFullYear","src_year","years","utcMinute","setUTCSeconds","src_utcMinute","utcMinutes","utcHour","setUTCMinutes","src_utcHour","utcHours","utcDay","setUTCHours","setUTCDate","src_utcDay","utcDays","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcSundays","utcMondays","utcTuesdays","utcWednesdays","utcThursdays","utcFridays","utcSaturdays","utcMonth","setUTCMonth","src_utcMonth","utcMonths","utcYear","setUTCFullYear","src_utcYear","utcYears","ctor","superCtor","super_","writable","configurable","TempCtor","Buffer","copyProps","dst","SafeBuffer","arg","encodingOrOffset","alloc","allocUnsafe","allocUnsafeSlow","TypeError","fill","encoding","buf","SlowBuffer","global","__WEBPACK_AMD_DEFINE_RESULT__","self","previousUnderscore","ArrayProto","ObjProto","SymbolProto","nativeIsArray","nativeKeys","nativeCreate","Ctor","obj","_wrapped","nodeType","VERSION","builtinIteratee","optimizeCb","func","argCount","accumulator","iteratee","isFunction","isObject","restArguments","rest","baseCreate","shallowProperty","has","deepGet","MAX_ARRAY_INDEX","getLength","isArrayLike","collect","results","currentKey","createReduce","dir","reducer","memo","initial","foldl","inject","reduceRight","foldr","detect","predicate","findIndex","findKey","negate","all","some","any","includes","include","item","fromIndex","guard","invoke","contextPath","method","pluck","where","attrs","findWhere","computed","lastComputed","sample","last","rand","sortBy","criteria","behavior","groupBy","indexBy","countBy","reStrSymbol","toArray","isString","pass","head","take","tail","drop","compact","Boolean","flatten","shallow","strict","idx","isArguments","len","without","otherArrays","difference","uniq","unique","isSorted","isBoolean","seen","union","argsLength","unzip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","high","createIndexFinder","predicateFind","lastIndexOf","chunk","executeBound","sourceFunc","boundFunc","callingContext","bound","callArgs","partial","boundArgs","placeholder","bindAll","memoize","hasher","address","delay","wait","defer","throttle","options","timeout","later","leading","now","throttled","remaining","trailing","cancel","debounce","immediate","debounced","callNow","wrapper","times","once","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","proto","prop","allKeys","mapObject","functions","createAssigner","keysFunc","defaults","extend","extendOwn","assign","eq","deepEq","keyInObj","pick","omit","String","props","tap","interceptor","isMatch","aStack","bStack","className","areArrays","aCtor","bCtor","isEqual","isEmpty","isElement","nodelist","childNodes","Int8Array","isSymbol","parseFloat","isNumber","isNull","isUndefined","noConflict","propertyOf","accum","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","noMatch","escapes","\\","\r","\n","
","
","escapeRegExp","escapeChar","template","settings","oldSettings","render","variable","argument","chain","instance","_chain","chainResult","mixin","toJSON","define","factory","definition","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color","toLowerCase","exec","Rgb","parseInt","rgbn","rgba","hsla","rgbConvert","rgb","opacity","hex","Hsl","hsl","hslConvert","hsl2rgb","m2","displayable","brighter","darker","deg2rad","rad2deg","Xn","Yn","Zn","labConvert","Lab","Hcl","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","lch","hcl","ED","EB","BC_DA","Cubehelix","bl","cubehelixConvert","cosh","sinh","v3","src_basis","color_hue","gamma","nogamma","src_rgb","rgbGamma","rgbSpline","spline","rgbBasis","rgbBasisClosed","nb","na","src_value","reA","reB","cssNode","cssRoot","cssView","svgNode","am","bm","bs","lastIndex","one","zero","discrete","src_hue","skewX","scaleX","scaleY","decompose","interpolateTransform","pxComma","pxParen","degParen","interpolateTransformCss","interpolateTransformSvg","consolidate","rho","SQRT2","ux0","uy0","ux1","uy1","coshr0","hue","src_hsl","hslLong","src_hcl","hclLong","cubehelix_cubehelix","cubehelixGamma","src_cubehelix","cubehelixLong","piecewise","quantize","interpolator","samples","__export","__WEBPACK_EXTERNAL_MODULE__10__","assert","val","msg","inherits","BN","base","endian","isBN","negative","words","_init","wordSize","parseHex","str","parseBase","mul","num","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","off","limbLen","limbPow","total","mod","word","imuln","_iaddn","dest","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","out","carry","ncarry","rword","maxJ","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toBuffer","toArrayLike","ArrayType","byteLength","reqLength","littleEndian","res","andln","iushrn","clz32","_countBits","_zeroBits","bitLength","zeroBits","toTwos","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","sub","comb10MulTo","al0","ah0","al1","ah1","al2","ah2","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","bl0","bh0","bl1","bh1","bl2","bh2","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","imul","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","revBin","rb","rbt","rws","iws","rtws","itws","rtwdf","itwdf","rtwdf_","itwdf_","re","ie","ro","io","guessLen13b","odd","conjugate","normalize13b","ws","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","acc","egcd","isEven","im","isOdd","jm","gcd","_invmp","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","tmp","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","outLen","prev","mod3","nOne","lpow","inv","wnd","currentLen","mont","__importStar","__importDefault","default","is_typedarray_1","typesToArray","int8","int16","Int16Array","int32","Int32Array","uint8","Uint8Array","uint16","Uint16Array","uint32","Uint32Array","float32","float64","Float64Array","arrayToTypes","array_or_json","deserialize","deserialize_array_or_json","manager","data1d","dtype","console","ar","shape","deserialize_typed_array","serialize","serialize_array_or_json","DataView","serialize_typed_array","extendStatics","__extends","setPrototypeOf","__proto__","__","Private","algorithm_1","messaging_1","properties_1","signaling_1","title_1","Widget","_flags","_layout","_disposed","Signal","createNode","addClass","dispose","isDisposed","setFlag","Flag","IsDisposed","isAttached","detach","clearData","MessageLoop","AttachedProperty","testFlag","IsAttached","IsHidden","IsVisible","titleProperty","dataset","ChildMessage","sendMessage","Msg","ParentChanged","DisallowLayout","iter","widget","hasClass","removeClass","toggleClass","toggle","postMessage","UpdateRequest","FitRequest","activate","ActivateRequest","close","CloseRequest","show","isVisible","BeforeShow","clearFlag","AfterShow","hide","BeforeHide","AfterHide","setHidden","hidden","flag","processMessage","notifyLayout","onResize","onUpdateRequest","onFitRequest","onBeforeShow","onAfterShow","onBeforeHide","onAfterHide","onBeforeAttach","isHidden","onAfterAttach","onBeforeDetach","onAfterDetach","onActivateRequest","onCloseRequest","onChildAdded","onChildRemoved","processParentMessage","Message","BeforeAttach","AfterAttach","BeforeDetach","AfterDetach","ConflatableMessage","_super","_this","ResizeMessage","UnknownSize","attach","host","ref","body","owner","Title","setImmediate","clearImmediate","collections_1","conflate","handler","hooks","messageHooks","retro","hook","messageHook","err","exceptionHandler","invokeHook","invokeHandler","isConflatable","messageQueue","posted","enqueueMessage","installMessageHook","removeMessageHook","scheduleCleanup","ArrayExt","flush","flushGuard","loopTaskID","unschedule","runMessageLoop","getExceptionHandler","setExceptionHandler","old","LinkedList","WeakMap","dirtySet","Set","requestAnimationFrame","cancelAnimationFrame","addLast","sentinel","removeFirst","cleanupDirtySet","cleanupHooks","clear","removeAllWhere","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","RangeError","ArrayBuffer","byteOffset","fromArrayLike","fromArrayBuffer","isEncoding","actual","write","fromString","isBuffer","checked","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","arr","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","hexWrite","Number","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","_isBuffer","pos","swap16","swap32","swap64","equals","thisStart","thisEnd","thisCopy","targetCopy","_arr","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","time_format_regex","deepCopy","isDate","newobj","convert_dates","convert_to_date","getCustomRange","pivot","scaleLinear","is_valid_time_format","is_array","elem","widgets","version_1","MarkModel","WidgetModel","[object Object]","_model_name","_model_module","_view_module","_model_module_version","semver_range","_view_module_version","scales","scales_metadata","preserve_domain","display_legend","labels","apply_clip","selected_style","unselected_style","selected","enable_hover","tooltip","tooltip_style","interactions","hover","tooltip_location","attributes","super","update_scales","handle_destroy","dirty","display_el_classes","update_domains","trigger","unregister_all_scales","del_domain","model_id","dimension","orientation","serializers","unpack_models","widgets_1","d3GetEvent","is_defined","Mark","WidgetView","setElement","d3el","el","x_padding","y_padding","uuid","scale_creation_promise","set_scale_views","listenTo","model","clip_id","tooltip_div","event_metadata","mouse_over","msg_name","lookup_data","hit_test","legend_clicked","element_clicked","parent_clicked","legend_mouse_over","stopListening","scale_models","scale_promises","create_child_view","resolvePromisesDict","set_positional_scales","initialize_additional_scales","set_ranges","update_visibility","selected_style_updated","unselected_style_updated","relayout","on_some_change","x_disp","y_disp","inter_x_disp","inter_y_disp","highlight_axes","unhighlight_axes","start_pxl","end_pxl","pxl","array_pixels","colorScale","defaultColors","opacityScale","defaultOpacities","clear_style","selected_indices","style_updated","sel_indices","unselected_indices","mark_data","new_style","indices","elements","set_default_style","set_style_on_elements","style_arr","all_indices","mouse_events","tooltip_view","styles","pWidget","popper","enableEventListeners","move_tooltip","popper_reference","scheduleUpdate","disableEventListeners","tooltip_interactions","is_hover_element","clicked_data","get_data_dict","show_tooltip","tooltip_model","event_name","custom_msg_sender","event_listeners","event_data","send","mouse_move","mouse_out","legend_mouse_out","interaction","refresh_tooltip","hide_tooltip","click","process_click","reset_click","process_hover","reset_hover","legend_click","process_legend_click","reset_legend_click","legend_hover","process_legend_hover","reset_legend_hover","hovered_data","hit_check","class_name","elliptic","version","utils","curves","ec","eddsa","sender","connect","slot","thisArg","disconnect","disconnectBetween","receiver","disconnectSender","disconnectReceiver","disconnectAll","signal","receivers","receiversForSender","findConnection","senders","sendersForReceiver","connection","invokeSlot","connections","cleanupConnections","isDeadConnection","equal","Dispatch","types","T","src_dispatch","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","elapsed","timer","time","ease","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","transition_interpolate","attrTweenNS","attrInterpolateNS","_value","attrTween","attrInterpolate","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","on_start","styleTween","styleInterpolate","transition_id","Transition","_name","src_transition_transition","newId","selection_prototype","inherit","id0","id1","string00","string10","interpolate0","string0","string1","value1","styleNull","listener0","styleMaybeRemove","defaultTiming","transition_inherit","src_active","taskHead","taskTail","timer_frame","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","setFrame","clearNow","Timer","_call","_time","timerFlush","wake","sleep","nap","poke","clearInterval","setInterval","src_timeout","src_interval","formatDecimal","toExponential","coefficient","src_exponent","formatSpecifier","FormatSpecifier","align","comma","prefixExponent","defaultLocale_locale","defaultLocale_format","defaultLocale_formatPrefix","formatTrim","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","toUpperCase","prefixes","src_locale","locale","grouping","thousands","substring","currency","decimal","numerals","formatNumerals","percent","newFormat","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatPrefix","defaultLocale","precisionFixed","precisionPrefix","precisionRound","ArrayIterator","fn","it","_index","_source","isSurrogatePair","htonl","zero2","zero8","enc","toHex32","join32","split32","rotr32","rotl32","sum32","sum32_3","sum32_4","sum32_5","sum64","ah","al","bh","sum64_hi","sum64_lo","sum64_4_hi","ch","cl","dh","sum64_4_lo","sum64_5_hi","eh","sum64_5_lo","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","properties","Map","entries","src_map","src_nest","rollup","nest","sortKeys","createResult","setResult","valuesByKey","createObject","setObject","createMap","setMap","sortKey","src_set","src_keys","src_values","src_entries","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","nextTick","title","browser","env","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","umask","domutils_1","widget_1","Layout","_fitPolicy","fitPolicy","layout","minWidth","minHeight","maxWidth","maxHeight","onChildShown","onChildHidden","removeWidget","getHorizontalAlignment","horizontalAlignmentProperty","setHorizontalAlignment","getVerticalAlignment","verticalAlignmentProperty","setVerticalAlignment","LayoutItem","_top","_left","_width","_height","_minWidth","_minHeight","_maxWidth","_maxHeight","limits","ElementExt","sizeLimits","clampW","clampH","resized","onAlignmentChanged","changed","StringDecoder","CipherBase","hashMode","_finalOrDigest","final","_final","__final","_decoder","_encoding","inputEnc","outputEnc","outData","_update","_toString","setAutoPadding","getAuthTag","setAuthTag","setAAD","_transform","_flush","done","fin","pna","objectKeys","Duplex","util","Readable","Writable","readable","allowHalfOpen","onend","_writableState","onEndNT","highWaterMark","_readableState","destroyed","_destroy","_pid","nextPID","_create","_coerce","coerce","_compare","_changed","ensureMap","_createValue","oldValue","newValue","_coerceValue","_maybeNotify","_compareValue","ownerData","delete","MAX_BYTES","MAX_UINT32","crypto","msCrypto","getRandomValues","generated","Hash","blockSize","finalSize","_block","_finalSize","_blockSize","_len","block","assigned","remainder","digest","rem","lowBits","highBits","hash","_hash","localDate","H","utcDate","UTC","newYear","formatLocale","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatDayOfMonth","formatMicroseconds","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","Q","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","V","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","Z","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseSpecifier","parseDayOfMonth","parseMicroseconds","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseYear","parseFullYear","parseZone","parseLiteralPercent","pads","charAt","newParse","newDate","week","utcFormat","utcParse","timeFormat","timeParse","-","0","numberRe","percentRe","requoteRe","requote","dow","isoFormat","toISOString","isoParse","BoxSizer","sizeHint","minSize","maxSize","stretch","BoxEngine","calc","sizers","totalMin","totalMax","totalSize","totalStretch","stretchCount","sizer","notDoneCount","freeSpace","distSpace","distStretch","amt","adjust","growLimit","shrinkLimit","grow","shrink","growSizer","shrinkSizer","layout_1","PanelLayout","_widgets","addWidget","insertWidget","attachWidget","moveWidget","removeWidgetAt","removeAt","detachWidget","toIndex","MD5","RIPEMD160","sha","Base","alg","objectToString","isNullOrUndefined","isRegExp","isError","isPrimitive","BlockHash","pending","pendingTotal","outSize","hmacStrength","padLength","_delta8","_delta32","_pad","_digest","asn1","bignum","constants","decoders","encoders","Reporter","DecoderBuffer","EncoderBuffer","Interaction_1","base_1","BaseSelector","Interaction","parameters","margin","mark_views_promise","populate_mark_views","selected_changed","marks_changed","handle_custom_messages","fig","mark_ids","views","mark_views","fig_mark_ids","_models","mark_indices","BaseXSelector","update_scale_domain","set_range","ignore_gui_update","initial_range","padded_range","target_range","expand_domain","BaseXYSelector","x_scale","y_scale","update_xscale_domain","set_x_range","update_yscale_domain","set_y_range","Scale","model_domain_changed","highlight_axis","unhighlight_axis","compute_and_set_domain","set_domain","old_range","new_range","scope","Timeout","clearFn","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","panellayout_1","Panel","createLayout","arg1","arg2","arg3","asUInt32Array","scrubVec","cryptBlock","keySchedule","SUB_MIX","SBOX","nRounds","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","x4","x8","AES","_key","_reset","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","decryptBlock","scrub","password","salt","keyBits","ivLen","keyLen","iv","used","keyStart","ivStart","short","edwards","aesid","fixProc","ciphers","compat","parseKeys","passphrase","subtype","ndata","stripped","tag","certificate","decode","tbsCertificate","subjectPublicKeyInfo","PublicKey","algorithm","RSAPublicKey","subjectPublicKey","subjectPrivateKey","pub_key","DSAparam","decrypt","kde","kdeparams","iters","algo","cipher","cipherText","keylen","pbkdf2Sync","createDecipheriv","EncryptedPrivateKey","PrivateKey","RSAPrivateKey","privateKey","ECPrivateKey","priv_key","DSAPrivateKey","signature","VirtualText","content","VirtualElement","_i","values_1","abbr","article","aside","audio","bdi","bdo","blockquote","br","canvas","caption","cite","col","colgroup","datalist","dd","del","dfn","dt","em","embed","fieldset","figcaption","figure","footer","form","h2","h3","h4","h5","h6","header","hr","iframe","img","ins","kbd","label","legend","li","main","mark","meter","nav","noscript","ol","optgroup","option","param","pre","progress","rt","ruby","samp","section","small","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","track","ul","var_","video","wbr","VirtualDOM","realize","createDOMNode","oldContent","hostMap","newContent","asContentArray","updateContent","createTextNode","element","name_1","specialAttrs","htmlFor","name_2","addDataset","elemStyle","addStyle","addAttrs","oldKeyed","keyMap","content_1","vNode","collectKeys","oldCopy","currElem","newCount","oldVNode","newVNode","newKey","oldKey","updateAttrs","lastChild","oldAttrs","newAttrs","oldDataset","newDataset","name_3","name_4","updateDataset","oldStyle","newStyle","updateStyle","disposable_1","Drag","_onScrollFrame","_scrollTarget","_a","SCROLL_EDGE_SIZE","scrollTop","scrollLeft","_dropAction","_override","_currentTarget","_currentElement","_promise","_resolve","mimeData","dragImage","proposedAction","supportedActions","event_1","createMouseEvent","dispatchDragLeave","_finalize","_addListeners","_attachDragImage","handleEvent","_evtMouseMove","_evtMouseUp","_evtKeyDown","stopPropagation","_updateCurrentTarget","_updateDragScroll","_moveDragImage","action","dispatchDrop","_removeListeners","findScrollTarget","prevTarget","currTarget","prevElem","elementFromPoint","dispatchDragExit","dispatchDragEnter","dispatchDragOver","_setDropAction","pointerEvents","_detachDragImage","validateAction","overrideCursor","cursor","overrideCursorID","DisposableDelegate","supported","actionTable","supportedTable","initMouseEvent","parentElement","hasAttribute","offsetX","offsetY","pageXOffset","pageYOffset","top_1","db","dsw","scrollWidth","dsh","scrollHeight","shouldScroll","dragEvent","createDragEvent","dropAction","copy-link","copy-move","link-move","screenX","screenY","ctrlKey","invert_range","ScaleModel","_view_name","allow_padding","domains","set_init_state","set_listeners","update_domain","ScaleModel_1","LinearScaleModel","min_range","mid_range","global_min","NEGATIVE_INFINITY","global_max","POSITIVE_INFINITY","reverse_changed","min_max_changed","min_from_data","max_from_data","prev_reverse","reverse_domain","new_width","prev_domain","min_index","prev_min","prev_max","prev_mid","min_width","stabilized","new_min","new_max","data_array","radian","circleSymbol","bqSymbolTypes","triangle-down","triangle-up","arrow","skew","ellipse","rectangle","symbolSize","symbolType","symbolSkew","functor","quadIn","quadOut","quadInOut","cubicIn","cubicOut","cubicInOut","polyIn","polyOut","polyInOut","sinIn","sinOut","sinInOut","expIn","expOut","expInOut","circleIn","circleOut","circleInOut","bounceIn","bounceOut","bounceInOut","backIn","overshoot","backOut","backInOut","elasticIn","amplitude","period","elasticOut","elasticInOut","boxengine_1","BoxLayout","_fixed","_spacing","_dirty","_sizers","_items","_box","_alignment","_direction","alignment","clampSpacing","_fit","nVisible","horz","isHorizontal","minW","minH","getSizeBasis","getStretch","box","boxSizing","horizontalSum","verticalSum","offsetWidth","offsetHeight","extra","stretchProperty","setStretch","sizeBasisProperty","setSizeBasis","onChildSizingChanged","_label","_caption","_mnemonic","_iconClass","_iconLabel","_className","_closable","mnemonic","icon","iconClass","iconLabel","closable","_dataset","HashBase","ARRAY16","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","_blockOffset","_length","Stream","EE","EventEmitter","PassThrough","pipe","ondata","pause","ondrain","resume","_isStdio","onclose","didOnEnd","destroy","er","cleanup","listenerCount","ReflectOwnKeys","Reflect","ReflectApply","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","_events","_eventsCount","_maxListeners","defaultMaxListeners","$getMaxListeners","_addListener","prepend","events","existing","warning","newListener","warned","warn","_onceWrap","fired","wrapFn","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","getPrototypeOf","setMaxListeners","getMaxListeners","doError","message","originalListener","spliceOne","rawListeners","eventNames","CorkedRequest","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","WritableState","internalUtil","deprecate","OurUint8Array","realHasInstance","destroyImpl","nop","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","finished","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","getBuffer","hasInstance","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","zl","zr","sl","_e","fn1","fn2","fn3","fn4","fn5","tl","Algorithm","sha1","sha224","sha256","sha384","sha512","Cipher","DES","CBC","EDE","deciphers","modes","createCipher","createCipheriv","Cipheriv","createDecipher","Decipher","Decipheriv","listCiphers","getCiphers","modeModules","ECB","CFB","CFB8","CFB1","OFB","CTR","GCM","bn","randomBytes","crt","priv","blinds","getr","blinder","modulus","publicExponent","unblinder","blind","blinded","prime1","prime2","qinv","exponent1","exponent2","common","ripemd","hmac","ripemd160","_fn","ObservableDisposableDelegate","DisposableSet","_isDisposed","items","ObservableDisposableSet","getKeyboardLayout","keyboardLayout","setKeyboardLayout","KeycodeLayout","codes","_codes","_keys","extractKeys","isValidKey","keyForKeydownEvent","EN_US","8","9","13","19","27","32","33","34","35","36","37","38","39","40","45","46","48","49","50","51","52","53","54","55","56","57","59","61","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","93","96","97","98","99","100","101","102","103","104","105","106","107","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","173","186","187","188","189","190","191","192","219","220","221","222","dragdrop_1","virtualdom_1","TabBar","_currentIndex","_titles","_previousTitle","_dragData","_tabMoved","_currentChanged","_tabCloseRequested","_tabDetachRequested","_tabActivateRequested","tabsMovable","allowDeselect","insertBehavior","removeBehavior","renderer","defaultRenderer","_orientation","_releaseMouse","currentIndex","pt","ct","previousIndex","previousTitle","currentTitle","getElementsByClassName","addTab","insertTab","asTitle","_onTitleChanged","_adjustCurrentForInsert","_adjustCurrentForMove","removeTab","removeTabAt","_adjustCurrentForRemove","clearTabs","releaseMouse","_evtMouseDown","titles","zIndex","renderTab","contentNode","tabs","findFirstIndex","tab","hitTest","pressX","pressY","tabPos","tabSize","tabPressPos","targetIndex","tabLayout","contentRect","override","dragActive","dragAborted","detachRequested","closeIconSelector","dragExceeded","tabRect","offsetLeft","offsetTop","snapTabLayout","detachExceeded","layoutTabs","finalizeTabPosition","parseTransitionDuration","resetTabPositions","Renderer","_tabID","_tabKeys","createTabKey","createTabStyle","createTabClass","createTabDataset","renderIcon","renderLabel","renderCloseIcon","createIconClass","DRAG_THRESHOLD","DETACH_THRESHOLD","transitionDuration","marginLeft","marginTop","pressPos","localPos","clientPos","clientSize","targetPos","targetEnd","pxPos","ideal","tgt","colorbrewer_1","default_scheme","get_max_index","color_object","cycle_colors","colors_len","return_array","cycle_colors_from_scheme","num_steps","color_set","color_index","get_linear_scale","get_ordinal_scale","scaleOrdinal","get_linear_scale_range","get_ordinal_scale_range","lasso_test_1","point_in_rectangle","is_inside","seg_inter_seg","point_in_lasso","rect_inter_rect","lasso_inter_rect","vertices","d3Scale","Scale_1","LinearScale","create_event_listeners","unpadded_scale","clamp","pixel","pixels","pix","initRange","initInterpolator","implicit","ordinal","unknown","band","ordinalRange","rescale","rangeRound","pointish","unit","normalize","clamper","bimap","polymap","untransform","continuous","src_tickFormat","linearish","nice","identity_identity","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","log10","log2","logp","powp","transformSymlog","log1p","transformSymexp","expm1","symlogish","symlog","transformPow","transformSqrt","transformSquare","powish","invertExtent","quantiles","durationSecond","durationHour","durationDay","durationMonth","durationYear","time_number","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","tickIntervals","tickInterval","utcTime","sequential_transformer","k10","sequential_copy","sequential","sequentialLog","sequentialSymlog","sequentialPow","sequentialSqrt","sequentialQuantile","diverging_transformer","k21","divergingLog","divergingSymlog","divergingPow","divergingSqrt","DATESCALE_WIDTH_THRESHOLD","UNITS_ARRAY","Axis","scale_promise","set_scale_promise","offset_promise","get_offset_promise","create_listeners","tick_format","generate_tick_formatter","set_scales_range","append_axis","update_scale","axis_scale","rescale_axis","set_tick_values","tickformat_changed","apply_tick_styling","update_label","update_color","update_grid_lines","update_label_location","update_label_offset","update_display","update_offset","parent_margin_updated","update_offset_scale_domain","g_axisline","get_axis_transform","animate","useticks","tick_values","num_ticks","get_ticks_from_array_or_length","numDateTicks","allticks","oom","guess_tick_format","get_tick_transforms","is_vertical","offset_scale","side","create_axis","get_label_attributes","get_text_styling","return_promise","scale_x","scale_y","offset_value","process_offset","get_basic_transform","label_x","label_location","label_offset","calculate_label_offset","text-anchor","grid_type","is_x","animation_duration","tickOffset","update_axis_domain","scale_range","max_index","displayed","redraw_axisline","highlight","unhighlight","e_index","search","prec","fmt_string","_replace_trailing_zeros","new_str","max_digits","_get_digits","diff_digits","get_format_func","_linear_scale_precision","format_millisecond","format_second","format_minute","format_hour","format_day","format_month","format_year","timeSecond","timeMinute","timeHour","timeDay","timeMonth","timeYear","_log_sc_precision","linear_sc_format","date_sc_format","log_sc_format","isTypedArray","isStrictTypedArray","loose","isLooseTypedArray","[object Int8Array]","[object Int16Array]","[object Int32Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Uint16Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]","Uint8ClampedArray","webpackPolyfill","paths","Random","randomFillSync","_finalized","throwIfNotStringOrBuffer","ReadableState","EElistenerCount","debugUtil","debug","debuglog","BufferList","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","isPaused","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","emitReadable_","flow","maybeReadMore_","nReadingNextTick","resume_","fromList","hasStrings","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onfinish","cleanedUp","pipeOnDrain","increasedAwaitDrain","dests","ev","paused","_fromList","emitErrorNT","readableDestroyed","writableDestroyed","afterTransform","_transformState","transforming","writechunk","rs","needTransform","writeencoding","_this2","err2","K","Sha256","_w","maj","sigma0","sigma1","gamma0","_f","_g","_h","T1","T2","Sha512","Ch","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","fh","gh","hh","fl","gl","xh","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","Legacy","md5","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","pbkdf2","MAX_ALLOC","checkBuffer","checkParameters","sizes","rmd160","saltLen","getDigest","ipad1","ipad2","DK","block1","destPos","hLen","incr32","getBlock","_cipher","_prev","encrypt","chunkNum","_cache","aes","GHASH","StreamCipher","ck","_ghash","_finID","ghash","toPad","ivBits","calcIv","_secCache","_decrypt","_alen","_mode","_authTag","_called","rump","xorTest","findPrime","simpleSieve","fermatTest","TWENTYFOUR","millerRabin","ONE","TWO","FIVE","TEN","THREE","ELEVEN","FOUR","_getPrimes","gen","brorand","MillerRabin","Rand","_randbelow","min_bytes","generate","_randrange","rone","rn1","getDivisor","_rand","getBytes","getByte","encode","ch32","maj32","p32","ft_1","s0_256","s1_256","g0_256","g1_256","shaCommon","sha256_K","SHA256","sha512_K","SHA512","ch64_hi","yh","yl","zh","ch64_lo","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","reporter","save","restore","fail","skip","_reporterState","raw","_reverse","der","DERDecoder","entity","DERNode","derDecodeTag","cls","tagClass","primitive","oct","tagStr","derDecodeLen","_decode","_peekTag","decodedTag","_decodeTag","_skipUntilEnd","_decodeList","possibleEnd","_decodeStr","unused","numstr","_isNumstr","printstr","_isPrintstr","_decodeObjid","relative","identifiers","ident","subident","_decodeTime","mon","sec","_decodeNull","_decodeBool","_decodeInt","_use","_getDecoder","DEREncoder","_encode","_encodeComposite","encodedTag","tagByName","tagClassByName","encodeTag","_createEncoderBuffer","lenOctets","_encodeStr","_encodeObjid","objid","_encodeTime","_encodeNull","_encodeInt","numArray","_encodeBool","_getEncoder","_skipDefault","dataBuffer","_baseState","defaultBuffer","_encodeValue","createHash","i2ops","seed","paddedMsg","coreutils_1","keyboard_1","CommandRegistry","_timerID","_replaying","_keystrokes","_keydownEvents","_keyBindings","_exactKeyMatch","_commands","_commandChanged","_commandExecuted","_keyBindingChanged","listCommands","hasCommand","addCommand","createCommand","notifyCommandChanged","JSONExt","emptyObject","cmd","usage","isEnabled","isToggled","execute","addKeyBinding","createKeyBinding","removeFirstOf","processKeydownEvent","keystroke","keystrokeForKeydownEvent","_replayKeydownEvents","_clearPendingState","matchKeyBinding","exact","_executeKeyBinding","_startTimer","_clearTimer","_onPendingTimeout","CHORD_TIMEOUT","replayKeyEvent","command","msg1","msg2","parseKeystroke","alt","ctrl","Platform","IS_MAC","normalizeKeystroke","mods","parts","formatKeystroke","asFunc","emptyStringFunc","negativeOneFunc","emptyDatasetFunc","trueFunc","falseFunc","normalizeKeys","validateSelector","bindings","specificity","sqm","matchSequence","targetDistance","sp","Selector","calculateSpecificity","which","cloneKeyboardEvent","dfault","IS_WIN","winKeys","macKeys","linuxKeys","isValid","bindKeys","userKeys","targ","curr","currentTarget","dist","__assign","commands_1","Menu","_childIndex","_activeIndex","_openTimerID","_closeTimerID","_childMenu","_parentMenu","_aboutToClose","_menuRequested","commands","menu","activeIndex","canActivate","activateNextItem","activatePreviousItem","triggerActiveItem","activeItem","_cancelOpenTimer","_cancelCloseTimer","rootMenu","_openChildMenu","addItem","insertItem","createItem","removeItem","removeItemAt","clearItems","open","forceX","forceY","openRootMenu","_evtMouseEnter","_evtMouseLeave","focus","collapsedFlags","computeCollapsed","collapsed","renderItem","childMenu","parentMenu","findMnemonic","multiple","auto","_startCloseTimer","submenu","_startOpenTimer","hitTestMenus","activateFirst","_closeChildMenu","itemNode","openSubmenu","TIMER_DELAY","createItemClass","createItemDataset","renderShortcut","renderSubmenu","formatLabel","formatShortcut","char","kb","keyBinding","SUBMENU_OVERLAP","tabIndex","MenuItem","k2","visibility","itemRect","borderTop","borderBottom","upperKey","mn","command_1","args_1","findLastValue","keyBindings","deepEqual","DockLayout","iterAllWidgets","iterUserWidgets","selectedWidgets","iterSelectedWidgets","tabBars","iterTabBars","iterHandles","moveHandle","findSplitNode","holdSizes","saveLayout","holdAllSizes","createConfig","restoreLayout","config","mainConfig","widgetSet","normalizeAreaConfig","oldWidgets","oldTabBars","oldHandles","tabBar","realizeAreaConfig","createTabBar","_createTabBar","createHandle","_createHandle","refNode","findTabNode","_insertTab","_insertSplit","_removeWidget","hitTestTabAreas","borderLeft","tabNode","hitTestTabNodes","borderWidth","borderRight","borderHeight","splitNode","syncHandles","maybeParent","childNode","childHandle","TabLayoutNode","splitHandle","i_1","gChild","gHandle","gSizer","findFirstTabNode","_splitRoot","i_2","normalizeSizes","createSizer","GOLDEN_RATIO","i_3","j_1","SplitLayoutNode","normalized","oldRoot","newRoot","normalizeTabAreaConfig","normalizeSplitAreaConfig","realizeTabAreaConfig","realizeSplitAreaConfig","tabSizer","widgetSizer","tabBarItem","widgetItem","tabBarSizer","ChainIterator","createNormalizedSizes","horizontal","fixed","handleStyle","SplitLayout","_hasNormedSizes","_handles","relativeSizes","setRelativeSizes","normed","average","averageSize","lastHandleIndex","StackedLayout","panel_1","stackedlayout_1","StackedPanel","_widgetRemoved","matplotlib","256","3","4","5","6","7","10","11","12","Mark_1","ScatterBase","base_creation_promise","drag_listener","drag_start","on_drag","drag_ended","hovered_style","unhovered_style","hovered_index","create_tooltip","process_interactions","compute_view_padding","size_scale","opacity_scale","skew_scale","rotation_scale","update_position","color_scale","color_scale_updated","update_default_size","update_default_opacities","update_default_skew","event_dispatcher","set_drag_behavior","update_selected","update_hovered","hovered_style_updated","unhovered_style_updated","default_opacities","get_element_rotation","x_pixels","y_pixels","pixel_coords","unique_id","elements_added","scatter_hover_handler","reset_hover_points","draw_elements","add_element","delete_element","reset_selection","scatter_click_handler","updated_view","elem_index","accelKey","cancelBubble","hov_indices","unhovered_indices","legend_el","rect_dim","el_added","draw_legend_elements","max_length","abs_diff","sel_index","point_selector","rect_selector","apply_styles","style_dict","clearing_style","dragged_node","set_drag_style","restrict_x","restrict_y","origin","update_array","reset_drag_style","mouse_pos","curr_pos","xn","copyWithin","MarkModel_1","ScatterBaseModel","hovered_point","enable_move","enable_delete","update_on_move","update_data","x_data","y_data","min_len","update_mark_data","update_unique_ids","OrdinalScaleModel","domain_changed","ord_domain","ColorScale","create_d3_scale","update_extrapolation","color_range","LinearScaleModel_1","colorutils","ColorScaleModel","extrapolation","colors_changed","prev_length","n_colors","create_domain","mid_index","toDomainType","bqSymbol","Lines","base_render_promise","dot","update_line_xy","update_style","update_path_style","update_fill","update_labels","update_stroke_width","update_legend_labels","update_curves_subset","update_line_style","update_marker","update_marker_size","get_line_style","stroke_width","fill_color","opacities","fill_opacities","get_element_color","get_fill_color","update_marker_style","interpolation","get_interpolation","path_closure","legend_line","legend_path_data","brush_extent","x_start","x_end","idx_start","idx_end","selector_model","curve_labels","get_labels","legend_data","fill_colors","display_labels","curves_subset","plotarea_height","get_colors","curves_sel","last_xy","update_dots_xy","curveLinear","curveBasis","curveCardinal","monotone","curveMonotoneY","new_curves","draw_dots","dots","sub_index","marker_padding","line_padding","marker_size","popperreference","popper_js_1","ShaderChunk","Figure","DOMWidgetView","relayoutRequested","change_theme","svg_background","_initial_marks_created","_initial_marks_created_resolve","figureSize","clientRectRatio","maxRatio","layoutPromise","renderImpl","getFigureSize","x_pad_dict","y_pad_dict","x_padding_arr","y_padding_arr","figure_padding_x","figure_padding_y","update_plotarea_dimensions","plotarea_width","fig_background","PositionReference","placement","bg","bg_events","fig_axes","fig_marks","clip_path","save_png","save_svg","create_figure_scales","ViewList","add_mark","remove_mark","mark_views_updated","replace_dummy_nodes","update_marks","update_legend","set_interaction","update_gl","axis_views","add_axis","axis_views_updated","update_title","debouncedRelayout","WebGLRenderer","antialias","premultipliedAlpha","setSize","setClearAlpha","setPixelRatio","devicePixelRatio","domElement","layout_webgl_canvas","dummy_node","replaceChild","title_style_updated","background_style_updated","change_layout","legend_style_updated","legend_text_updated","x_scale_promise","y_scale_promise","scale_model","scale_id","scale_padding","fig_padding","dict","mark_view","cid","prev_scale_models","remove_from_padding_dict","get_key_for_orientation","update_padding_dict","update_paddings","state_change","mark_padding_updated","mark_scales_updated","child_x_scale","get_key_for_dimension","child_y_scale","render_gl","createWebGLRenderer","processPhosphorMessage","relayoutImpl","legend_location","legend_g","max_label_len","child_count","draw_legend","legend_height","coords","get_legend_coords","disp","y_start","fig_width","fig_height","interaction_view","node_background","node_foreground","background","computedStyle","cssCode","regs","css","sheets","styleSheets","rules","cssRules","rule","selectorText","cssText","get_css","cssVariableCode","styleElement","defs","g_root","data_url","toDataURL","outerHTML","get_svg","accept","getContext","drawImage","btoa","filename","get_rendered_canvas","download","href","encodeURIComponent","_update_requested","_update_gl","autoClear","autoClearColor","marks_gl","ElementReference","elt","halfwidth","halfheight","isBrowser","longerTimeoutBrowsers","timeoutDuration","navigator","userAgent","called","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","nodeName","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","DOCUMENT_POSITION_FOLLOWING","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","upperSide","scrollingElement","getBordersSize","sideA","sideB","getSize","getWindowSizes","classCallCheck","Constructor","createClass","defineProperties","descriptor","protoProps","staticProps","_extends","getClientRect","offsets","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","subtract","modifier","includeScroll","getFixedPositionOffsetParent","getBoundaries","reference","boundariesElement","boundaries","excludeScroll","relativeOffset","innerWidth","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","refRect","rects","sortedAreas","_ref","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","getOuterSizes","marginBottom","marginRight","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","check","runModifiers","modifiers","ends","cur","enabled","isModifierEnabled","modifierName","getSupportedPropertyName","upperProp","toCheck","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","isNumeric","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","basePlacement","useHeight","fragments","frag","divider","splitRegex","ops","op","mergeWithPrevious","toValue","index2","Defaults","positionFixed","removeOnDestroy","onCreate","onUpdate","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","primary","escapeWithReference","secondary","keepTogether","opSide","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","flip","flipped","originalPlacement","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","prefixedProperty","willChange","invertTop","invertLeft","x-placement","arrowStyles","applyStyle","onLoad","modifierOptions","Popper","isDestroyed","isCreated","jquery","Utils","PopperUtils","EventDispatcher","WebGLRenderTargetCube","WebGLRenderTarget","ShaderLib","UniformsLib","UniformsUtils","FogExp2","Fog","Scene","Sprite","LOD","SkinnedMesh","Skeleton","Bone","Mesh","LineSegments","LineLoop","Line","Points","Group","VideoTexture","DataTexture","CompressedTexture","CubeTexture","CanvasTexture","DepthTexture","Texture","CompressedTextureLoader","DataTextureLoader","CubeTextureLoader","TextureLoader","ObjectLoader","MaterialLoader","BufferGeometryLoader","DefaultLoadingManager","LoadingManager","JSONLoader","ImageLoader","ImageBitmapLoader","FontLoader","FileLoader","Loader","LoaderUtils","Cache","AudioLoader","SpotLightShadow","SpotLight","PointLight","RectAreaLight","HemisphereLight","DirectionalLightShadow","DirectionalLight","AmbientLight","LightShadow","Light","StereoCamera","PerspectiveCamera","OrthographicCamera","CubeCamera","ArrayCamera","Camera","AudioListener","PositionalAudio","AudioContext","AudioAnalyser","Audio","VectorKeyframeTrack","StringKeyframeTrack","QuaternionKeyframeTrack","NumberKeyframeTrack","ColorKeyframeTrack","BooleanKeyframeTrack","PropertyMixer","PropertyBinding","KeyframeTrack","AnimationUtils","AnimationObjectGroup","AnimationMixer","AnimationClip","Uniform","InstancedBufferGeometry","BufferGeometry","Geometry","InterleavedBufferAttribute","InstancedInterleavedBuffer","InterleavedBuffer","InstancedBufferAttribute","Face3","Object3D","Raycaster","Layers","Clock","QuaternionLinearInterpolant","LinearInterpolant","DiscreteInterpolant","CubicInterpolant","Interpolant","Triangle","_Math","Spherical","Cylindrical","Plane","Frustum","Ray","Matrix4","Matrix3","Box3","Box2","Line3","Euler","Vector4","Vector3","Vector2","Quaternion","ImmediateRenderObject","VertexNormalsHelper","SpotLightHelper","SkeletonHelper","PointLightHelper","RectAreaLightHelper","HemisphereLightHelper","GridHelper","PolarGridHelper","FaceNormalsHelper","DirectionalLightHelper","CameraHelper","BoxHelper","Box3Helper","PlaneHelper","ArrowHelper","AxesHelper","Shape","ShapePath","Font","CurvePath","Curve","ShapeUtils","WebGLUtils","WireframeGeometry","ParametricGeometry","ParametricBufferGeometry","TetrahedronGeometry","TetrahedronBufferGeometry","OctahedronGeometry","OctahedronBufferGeometry","IcosahedronGeometry","IcosahedronBufferGeometry","DodecahedronGeometry","DodecahedronBufferGeometry","PolyhedronGeometry","PolyhedronBufferGeometry","TubeGeometry","TubeBufferGeometry","TorusKnotGeometry","TorusKnotBufferGeometry","TorusGeometry","TorusBufferGeometry","TextGeometry","TextBufferGeometry","SphereGeometry","SphereBufferGeometry","RingGeometry","RingBufferGeometry","PlaneGeometry","PlaneBufferGeometry","LatheGeometry","LatheBufferGeometry","ShapeGeometry","ShapeBufferGeometry","ExtrudeGeometry","ExtrudeBufferGeometry","EdgesGeometry","ConeGeometry","ConeBufferGeometry","CylinderGeometry","CylinderBufferGeometry","CircleGeometry","CircleBufferGeometry","BoxGeometry","BoxBufferGeometry","ShadowMaterial","SpriteMaterial","RawShaderMaterial","ShaderMaterial","PointsMaterial","MeshPhysicalMaterial","MeshStandardMaterial","MeshPhongMaterial","MeshToonMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshDepthMaterial","MeshDistanceMaterial","MeshBasicMaterial","LineDashedMaterial","LineBasicMaterial","Material","Float64BufferAttribute","Float32BufferAttribute","Uint32BufferAttribute","Int32BufferAttribute","Uint16BufferAttribute","Int16BufferAttribute","Uint8ClampedBufferAttribute","Uint8BufferAttribute","Int8BufferAttribute","BufferAttribute","ArcCurve","CatmullRomCurve3","CubicBezierCurve","CubicBezierCurve3","EllipseCurve","LineCurve","LineCurve3","QuadraticBezierCurve","QuadraticBezierCurve3","SplineCurve","REVISION","MOUSE","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","FrontFaceDirectionCW","FrontFaceDirectionCCW","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","FrontSide","BackSide","DoubleSide","FlatShading","SmoothShading","NoColors","FaceColors","VertexColors","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","NeverDepth","AlwaysDepth","LessDepth","LessEqualDepth","EqualDepth","GreaterEqualDepth","GreaterDepth","NotEqualDepth","MultiplyOperation","MixOperation","AddOperation","NoToneMapping","LinearToneMapping","ReinhardToneMapping","Uncharted2ToneMapping","CineonToneMapping","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","SphericalReflectionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipMapNearestFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipMapNearestFilter","LinearMipMapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","UnsignedInt248Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGBEFormat","DepthFormat","DepthStencilFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC1_Format","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","Face4","LineStrip","LinePieces","MeshFaceMaterial","MultiMaterial","PointCloud","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","DynamicBufferAttribute","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","ClosedSplineCurve3","SplineCurve3","Spline","AxisHelper","BoundingBoxHelper","EdgesHelper","WireframeHelper","XHRLoader","BinaryTextureLoader","GeometryUtils","ImageUtils","Projector","CanvasRenderer","SceneUtils","LensFlare","EPSILON","isInteger","nextKey","hasEventListener","listenerArray","quaternion","LEFT","MIDDLE","RIGHT","DEG2RAD","RAD2DEG","generateUUID","lut","euclideanModulo","mapLinear","lerp","smoothstep","smootherstep","randInt","randFloat","randFloatSpread","degToRad","radToDeg","isPowerOfTwo","ceilPowerOfTwo","floorPowerOfTwo","_z","isVector2","setScalar","scalar","setX","setY","setComponent","getComponent","addVectors","addScalar","addScaledVector","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","clampScalar","minVal","maxVal","clampLength","roundToZero","lengthSq","manhattanLength","distanceTo","distanceToSquared","manhattanDistanceTo","setLength","lerpVectors","fromArray","fromBufferAttribute","attribute","getX","getY","rotateAround","isMatrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","te","me","copyPosition","extractBasis","xAxis","yAxis","zAxis","setFromMatrixColumn","makeBasis","extractRotation","scaleZ","makeRotationFromEuler","euler","isEuler","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","z2","xx","yy","zz","wx","wy","wz","lookAt","eye","up","crossVectors","multiplyMatrices","premultiply","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","applyToBufferAttribute","getZ","applyMatrix4","setXYZ","setPosition","getInverse","throwOnDegenerate","t11","t12","t13","t14","det","detInv","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","makeRotationY","makeRotationZ","makeRotationAxis","makeScale","makeShear","invSX","invSY","invSZ","setFromRotationMatrix","makePerspective","near","far","makeOrthographic","slerp","qa","qb","qm","slerpFlat","dstOffset","src0","srcOffset0","src1","srcOffset1","z1","sqrSin","tDir","onChangeCallback","setFromEuler","setFromAxisAngle","halfAngle","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","vFrom","vTo","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","onChange","isVector3","setZ","multiplyVectors","applyEuler","applyQuaternion","applyAxisAngle","qx","qy","qz","qw","ix","iy","iz","iw","camera","projectionMatrix","matrixWorld","unproject","transformDirection","az","bz","projectOnVector","projectOnPlane","planeNormal","angleTo","setFromSpherical","sinPhiRadius","setFromCylindrical","setFromMatrixPosition","setFromMatrixScale","isMatrix3","setFromMatrix4","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","closestPoint","textureId","mapping","wrapS","wrapT","magFilter","minFilter","anisotropy","DEFAULT_IMAGE","mipmaps","DEFAULT_MAPPING","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","unpackAlignment","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","activeCubeFace","activeMipMapLevel","p4","p5","planes","isTexture","meta","isRootObject","textures","metadata","generator","images","url","HTMLCanvasElement","ImageData","putImageData","getDataURL","transformUv","uv","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","getW","isWebGLRenderTarget","isWebGLRenderTargetCube","isDataTexture","isBox3","setFromArray","minX","minY","minZ","maxX","maxZ","setFromBufferAttribute","setFromPoints","makeEmpty","il","expandByPoint","setFromCenterAndSize","halfSize","setFromObject","expandByObject","getCenter","expandByVector","expandByScalar","traverse","isGeometry","isBufferGeometry","updateMatrixWorld","containsBox","getParameter","intersectsBox","intersectsSphere","clampPoint","intersectsPlane","plane","intersectsTriangle","f0","f1","f2","testAxis","extents","triangleNormal","satForAxes","axes","distanceToPoint","getBoundingSphere","optionalCenter","maxRadiusSq","radiusSum","deltaLengthSq","getBoundingBox","setComponents","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","denominator","intersectsLine","startSign","endSign","coplanarPoint","optionalNormalMatrix","normalMatrix","referencePoint","frustum","setFromMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","intersectsObject","boundingSphere","computeBoundingSphere","intersectsSprite","sprite","negRadius","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_vertex","lights_pars_begin","lights_pars_maps","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normalmap_pars_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","cube_frag","cube_vert","depth_frag","depth_vert","distanceRGBA_frag","distanceRGBA_vert","equirect_frag","equirect_vert","linedashed_frag","linedashed_vert","meshbasic_frag","meshbasic_vert","meshlambert_frag","meshlambert_vert","meshphong_frag","meshphong_vert","meshphysical_frag","meshphysical_vert","normal_frag","normal_vert","points_frag","points_vert","shadow_frag","shadow_vert","uniforms","uniforms_src","uniforms_dst","parameter_src","isColor","ColorKeywords","setRGB","setHex","setStyle","setHSL","hue2rgb","handleAlpha","components","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","getHex","getHexString","getHSL","saturation","lightness","getStyle","offsetHSL","addColors","color1","color2","diffuse","uvTransform","alphaMap","specularmap","specularMap","envmap","envMap","flipEnvMap","reflectivity","refractionRatio","maxMipLevel","aomap","aoMap","aoMapIntensity","lightmap","lightMap","lightMapIntensity","emissivemap","emissiveMap","bumpmap","bumpMap","bumpScale","normalmap","normalMap","normalScale","displacementmap","displacementMap","displacementScale","displacementBias","roughnessmap","roughnessMap","metalnessmap","metalnessMap","gradientmap","gradientMap","fog","fogDensity","fogNear","fogFar","fogColor","lights","ambientLightColor","directionalLights","shadow","shadowBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotShadowMap","spotShadowMatrix","pointLights","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","basic","vertexShader","fragmentShader","lambert","emissive","phong","specular","shininess","standard","roughness","metalness","envMapIntensity","dashed","dashSize","cube","tCube","tFlip","equirect","tEquirect","distanceRGBA","referencePosition","nearDistance","farDistance","WebGLAttributes","buffers","isInterleavedBufferAttribute","deleteBuffer","bufferType","dynamic","DYNAMIC_DRAW","STATIC_DRAW","bindBuffer","bufferData","onUploadCallback","FLOAT","UNSIGNED_SHORT","SHORT","UNSIGNED_INT","INT","BYTE","UNSIGNED_BYTE","bytesPerElement","BYTES_PER_ELEMENT","updateRange","bufferSubData","updateBuffer","_order","DefaultOrder","physical","clearCoat","clearCoatRoughness","RotationOrders","setFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","channel","enable","disable","layers","object3DId","DefaultUp","modelViewMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","castShadow","receiveShadow","frustumCulled","renderOrder","userData","matrixWorldInverse","updateProjectionMatrix","materialIndex","vertexNormals","vertexColors","isObject3D","onBeforeRender","onAfterRender","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","translateZ","localToWorld","worldToLocal","isCamera","getObjectById","getObjectByProperty","getObjectByName","getWorldPosition","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverseVisible","traverseAncestors","updateMatrix","materials","shapes","library","material","uuids","extractFromCache","recursive","isOrthographicCamera","setViewOffset","fullWidth","fullHeight","clearViewOffset","zoomW","zoomH","scaleW","scaleH","geometryId","faces","faceVertexUvs","morphTargets","morphNormals","skinWeights","skinIndices","lineDistances","boundingBox","elementsNeedUpdate","verticesNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","itemSize","DirectGeometry","normals","uvs","uvs2","arrayMax","face","jl","computeBoundingBox","fromBufferGeometry","positions","uv2","tempNormals","tempUVs","tempUVs2","addFace","computeFaceNormals","vA","vB","vC","computeVertexNormals","areaWeighted","vl","computeFlatVertexNormals","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","uvs1","colors1","colors2","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeMesh","mesh","isMesh","mergeVertices","verticesMap","changes","faceIndicesToRemove","sortFacesByMaterialIndex","newUvs1","newUvs2","normalsHash","colorsHash","uvsHash","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","setBit","getUvIndex","getNormalIndex","getColorIndex","kl","uvsCopy","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","isBufferAttribute","setArray","setDynamic","copyAt","index1","copyArray","copyColorsArray","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZW","onUpload","computeGroups","fromGeometry","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","bufferGeometryId","morphAttributes","drawRange","widthSegments","heightSegments","depthSegments","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","addGroup","setIndex","addAttribute","width_half","height_half","segment_width","segment_height","getIndex","clearGroups","setDrawRange","needsUpdate","isPoints","isLine","updateFromObject","direct","__directGeometry","lineDistance","fromDirectGeometry","pA","pB","pC","normalizeNormals","attributeArray1","attribute2","attributeArray2","toNonIndexed","geometry2","array2","morphAttribute","segCenter","segDir","startP","startEnd","materialId","blending","flatShading","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaTest","overdraw","combine","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","skinning","setValues","defines","linewidth","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","drawMode","updateMorphTargets","WebGLBackground","planeCamera","planeMesh","boxMesh","clearColor","clearAlpha","setClear","getClearColor","setClearColor","getClearAlpha","renderList","scene","forceClear","autoClearDepth","autoClearStencil","isCubeTexture","renderBufferDirect","WebGLBufferRenderer","info","setMode","drawArrays","renderInstances","extension","drawArraysInstancedANGLE","maxInstancedCount","WebGLCapabilities","maxAnisotropy","getMaxPrecision","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","MEDIUM_FLOAT","maxPrecision","logarithmicDepthBuffer","maxTextures","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","maxCubemapSize","MAX_CUBE_MAP_TEXTURE_SIZE","maxAttributes","MAX_VERTEX_ATTRIBS","maxVertexUniforms","MAX_VERTEX_UNIFORM_VECTORS","maxVaryings","MAX_VARYING_VECTORS","maxFragmentUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","vertexTextures","floatFragmentTextures","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","floatVertexTextures","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","resetGlobalState","numPlanes","numIntersection","projectPlanes","skipTransform","nPlanes","dstArray","flatSize","viewMatrix","i4","enableLocalClipping","beginShadows","endShadows","setState","fromCache","nGlobal","lGlobal","clippingState","WebGLExtensions","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","buffergeometry","memory","_bufferGeometry","geometryAttributes","ELEMENT_ARRAY_BUFFER","ARRAY_BUFFER","getWireframeAttribute","geometryIndex","WebGLIndexedBufferRenderer","drawElements","drawElementsInstancedANGLE","WebGLInfo","frame","calls","programs","autoReset","instanceCount","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","LINES","LINE_STRIP","LINE_LOOP","POINTS","absNumericalSort","WebGLMorphtargets","influencesList","morphInfluences","program","objectInfluences","morphTargetInfluences","influences","influence","getUniforms","setValue","WebGLObjects","updateList","isMaterial","onBeforeCompile","currentValue","isRoot","emissiveIntensity","sizeAttenuation","gapSize","srcPlanes","dstPlanes","isMeshBasicMaterial","isShaderMaterial","ray","at","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","optionalPointOnRay","optionalPointOnSegment","sqrDist","extDet","segExtent","invDet","intersectSphere","tca","radius2","thc","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","edge1","edge2","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","distanceSq","closestPointToPointParameter","clampToLine","startEnd2","getNormal","targetLengthSq","getBarycoord","dot00","dot01","dot02","dot11","dot12","denom","invDenom","setFromPointsAndIndices","i2","getArea","getMidpoint","getPlane","edgeList","projectedPoint","minDistance","setDrawMode","morphTargetDictionary","ml","inverseMatrix","tempA","tempB","tempC","uvA","uvB","uvC","barycoord","intersectionPoint","intersectionPointWorld","uvIntersection","uv1","uv3","checkIntersection","raycaster","checkBufferGeometryIntersection","faceIndex","fvA","fvB","fvC","isMultiMaterial","faceMaterial","targets","uvs_f","emptyTexture","emptyCubeTexture","UniformContainer","seq","arrayCacheF32","arrayCacheI32","mat4array","mat3array","nBlocks","firstElem","allocTexUnits","allocTextureUnit","setValue1f","uniform1f","addr","setValue1i","uniform1i","setValue2fv","uniform2fv","uniform2f","setValue3fv","uniform3f","uniform3fv","setValue4fv","uniform4fv","uniform4f","setValue2fm","uniformMatrix2fv","setValue3fm","uniformMatrix3fv","setValue4fm","uniformMatrix4fv","setValueT1","setTexture2D","setValueT6","setTextureCube","setValue2iv","uniform2iv","setValue3iv","uniform3iv","setValue4iv","uniform4iv","setValue1fv","uniform1fv","setValue1iv","uniform1iv","setValueV2a","setValueV3a","setValueV4a","setValueM2a","setValueM3a","setValueM4a","setValueT1a","setValueT6a","SingleUniform","activeInfo","getSingularSetter","PureArrayUniform","getPureArraySetter","StructuredUniform","RePathPart","addUniform","uniformObject","parseUniform","pathLength","matchEnd","idIsIndex","subscript","WebGLUniforms","getProgramParameter","ACTIVE_UNIFORMS","getActiveUniform","getUniformLocation","WebGLShader","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","addLineNumbers","setOptional","upload","seqWithValue","programIdCount","getEncodingComponents","getTexelDecodingFunction","functionName","getToneMappingFunction","toneMapping","toneMappingName","filterEmptyLine","replaceLightNums","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","parseIncludes","unrollLoops","snippet","unroll","WebGLProgram","shadowMapTypeDefine","shadowMapType","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","prefixVertex","prefixFragment","gammaFactorDefine","customExtensions","rendererExtensions","envMapCubeUV","generateExtensions","customDefines","chunks","generateDefines","createProgram","isRawShaderMaterial","supportsVertexTextures","maxBones","useFog","fogExp","useVertexTexture","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","outputEncoding","mapEncoding","envMapEncoding","emissiveMapEncoding","depthPacking","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","cachedUniforms","cachedAttributes","programLog","getProgramInfoLog","vertexLog","fragmentLog","runnable","haveDiagnostics","LINK_STATUS","getError","VALIDATE_STATUS","diagnostics","deleteShader","getAttributes","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","fetchAttributeLocations","deleteProgram","usedTimes","WebGLPrograms","capabilities","shaderIDs","parameterNames","getTextureEncodingFromMap","gammaOverrideLinear","getParameters","shadows","nClipPlanes","nClipIntersection","shaderID","isSkinnedMesh","bones","skeleton","nVertexUniforms","nVertexMatrices","allocateBones","currentRenderTarget","getRenderTarget","gammaOutput","gammaInput","envMapMode","isFogExp2","maxMorphTargets","maxMorphNormals","directional","spot","rectArea","hemi","shadowMap","getProgramCode","acquireProgram","pl","programInfo","releaseProgram","WebGLProperties","painterSortStable","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","opaque","WebGLRenderLists","lists","UniformsCache","light","halfWidth","halfHeight","intersectPoint","worldPosition","worldScale","matrixPosition","offsetMatrix","identityMatrix","WebGLLights","ambient","vector3","matrix42","setup","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","intensity","isAmbientLight","isDirectionalLight","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","WebGLRenderState","lightsArray","shadowsArray","spritesArray","setupLights","pushLight","pushShadow","shadowLight","pushSprite","WebGLRenderStates","renderStates","renderState","WebGLShadowMap","_renderer","_objects","_frustum","_projScreenMatrix","_shadowMapSize","_maxShadowMapSize","_lookTarget","_lightPositionWorld","_MorphingFlag","_SkinningFlag","_NumberOfMaterialVariants","_depthMaterials","_distanceMaterials","_materialCache","1","2","cubeDirections","cubeUps","cube2DViewPorts","useMorphing","useSkinning","depthMaterial","distanceMaterial","getDepthMaterial","lightPositionWorld","materialVariants","customMaterial","customDepthMaterial","customDistanceMaterial","variantIndex","keyA","keyB","materialsForVariant","cachedMaterial","isMeshDistanceMaterial","renderObject","shadowCamera","groupMaterial","autoUpdate","faceCount","_state","BLEND","setTest","setScissorTest","vpWidth","vpHeight","pars","isSpotLightShadow","shadowMatrix","setRenderTarget","vpDimensions","WebGLSpriteRenderer","vertexBuffer","elementBuffer","spritePosition","spriteRotation","spriteScale","uvOffset","uvScale","fogType","fogDepth","fillStyle","fillRect","sprites","useProgram","initAttributes","enableAttribute","disableUnusedAttributes","CULL_FACE","vertexAttribPointer","activeTexture","TEXTURE0","oldFogType","sceneFogType","isFog","setBlending","setMask","WebGLState","colorBuffer","locked","currentColorMask","currentColorClear","colorMask","setLocked","lock","currentDepthMask","currentDepthFunc","currentDepthClear","DEPTH_TEST","depthMask","setFunc","NEVER","ALWAYS","LESS","LEQUAL","EQUAL","GEQUAL","GREATER","NOTEQUAL","clearDepth","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","STENCIL_TEST","stencilMask","stencilFunc","stencilRef","setOp","stencilFail","stencilZFail","stencilZPass","stencilOp","stencil","clearStencil","maxVertexAttributes","newAttributes","enabledAttributes","attributeDivisors","compressedTextureFormats","currentProgram","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","lineWidthAvailable","glVersion","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","texImage2D","RGBA","emptyTextures","blendEquationSeparate","FUNC_ADD","blendFuncSeparate","blendFunc","SRC_ALPHA","ZERO","ONE_MINUS_SRC_COLOR","ONE_MINUS_SRC_ALPHA","SRC_COLOR","setFlipSided","frontFace","CW","CCW","setCullFace","cullFace","BACK","FRONT","FRONT_AND_BACK","setPolygonOffset","factor","POLYGON_OFFSET_FILL","webglSlot","TEXTURE_2D","TEXTURE_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","enableVertexAttribArray","vertexAttribDivisorANGLE","enableAttributeAndDivisor","meshPerAttribute","disableVertexAttribArray","getCompressedTextureFormats","COMPRESSED_TEXTURE_FORMATS","setMaterial","frontFaceCW","setLineWidth","lineWidth","SCISSOR_TEST","webglType","webglTexture","boundTexture","compressedTexImage2D","WebGLTextures","_canvas","_isWebGL2","WebGL2RenderingContext","_videoTextures","clampToMaxSize","textureNeedsGenerateMipmaps","generateMipmap","__maxMipLevel","filterFallback","LINEAR","onTextureDispose","textureProperties","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","deallocateTexture","isVideoTexture","onRenderTargetDispose","renderTarget","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","deallocateRenderTarget","updateVideoTexture","__version","complete","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","textureNeedsPowerOfTwo","HTMLImageElement","ImageBitmap","makePowerOfTwo","isPowerOfTwoImage","glFormat","glType","setTextureParameters","mipmap","isDepthTexture","internalFormat","DEPTH_COMPONENT","DEPTH_COMPONENT32F","DEPTH_COMPONENT16","DEPTH_STENCIL","isCompressedTexture","uploadTexture","textureType","TEXTURE_WRAP_S","TEXTURE_WRAP_T","CLAMP_TO_EDGE","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","RGBA4","setupDepthRenderbuffer","isCube","webglDepthTexture","setupDepthTexture","createRenderbuffer","isCompressed","cubeImage","setTextureCubeDynamic","setupRenderTarget","isTargetPowerOfTwo","createFramebuffer","COLOR_ATTACHMENT0","updateRenderTargetMipmap","REPEAT","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","HALF_FLOAT_OES","ALPHA","RGB","LUMINANCE","LUMINANCE_ALPHA","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","MIN_EXT","MAX_EXT","UNSIGNED_INT_24_8_WEBGL","fov","aspect","filmGauge","filmOffset","cameras","WebVRManager","device","frameData","poseTarget","standingMatrix","standingMatrixInverse","VRFrameData","tempQuaternion","tempPosition","cameraL","cameraR","currentSize","currentPixelRatio","cameraVR","onVRDisplayPresentChange","isPresenting","eyeParameters","getEyeParameters","renderWidth","renderHeight","getPixelRatio","setDrawingBufferSize","userHeight","getDevice","setDevice","setPoseTarget","getCamera","depthNear","depthFar","getFrameData","stageParameters","sittingToStandingTransform","pose","poseObject","leftViewMatrix","rightViewMatrix","leftProjectionMatrix","rightProjectionMatrix","getLayers","layer","leftBounds","rightBounds","getStandingMatrix","submitFrame","_depth","_stencil","_antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","currentRenderList","currentRenderState","sortObjects","toneMappingExposure","toneMappingWhitePoint","objects","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","spriteRenderer","_isContextLost","_currentRenderTarget","_currentFramebuffer","_currentMaterialId","_currentGeometryProgram","_currentCamera","_currentArrayCamera","_currentViewport","_currentScissor","_currentScissorTest","_usedTextureUnits","_pixelRatio","_viewport","_scissor","_scissorTest","_clipping","_clippingEnabled","_localClippingEnabled","_vector3","getTargetPixelRatio","contextAttributes","onContextLost","onContextRestore","rangeMin","rangeMax","initGLContext","vr","onMaterialDispose","releaseMaterialProgramReference","deallocateMaterial","getContextAttributes","forceContextLoss","loseContext","forceContextRestore","restoreContext","setViewport","getDrawingBufferSize","pixelRatio","getCurrentViewport","setScissor","boolean","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","clearTarget","stopAnimation","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","programAttributes","positionArray","isMeshPhongMaterial","isMeshStandardMaterial","isMeshNormalMaterial","normalArray","ny","nz","uvArray","colorArray","setProgram","geometryProgram","updateBuffers","rangeFactor","isInstancedBufferGeometry","materialDefaultAttributeValues","programAttribute","geometryAttribute","stride","isInstancedInterleavedBuffer","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","setupVertexAttributes","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","compile","isLight","initMaterial","isAnimating","onAnimationFrame","requestAnimationLoopFrame","animationLoop","renderObjects","overrideMaterial","isArrayCamera","camera2","isImmediateRenderObject","renderObjectImmediate","materialProperties","programChange","lightsHash","numSupportedMorphTargets","numSupportedMorphNormals","progUniforms","uniformsList","useCache","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","isMeshLambertMaterial","boneTexture","boneMatrices","boneTextureSize","refreshUniformsFog","refreshUniformsCommon","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsPhong","refreshUniformsToon","isMeshPhysicalMaterial","refreshUniformsStandard","refreshUniformsPhysical","isMeshDepthMaterial","refreshUniformsDepth","refreshUniformsDistance","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isShadowMaterial","ltc_1","LTC_1","ltc_2","LTC_2","uvScaleMap","projectObject","isSprite","opaqueObjects","transparentObjects","textureUnit","setTexture","readRenderTargetPixels","textureFormat","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","readPixels","copyFramebufferToTexture","level","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","levels","boneInverses","calculateInverses","bindMode","bindMatrix","bindMatrixInverse","initBones","normalizeSkinWeights","linecap","linejoin","slices","stacks","pu","pv","sliceCount","uvBuffer","subdivideFace","cols","aj","bj","pushVertex","getVertexByIndex","correctUV","azimuth","inclination","subdivide","appplyRadius","azi","correctUVs","correctSeam","generateUVs","tubularSegments","radialSegments","taper","bufferGeometry","tangents","binormals","frames","computeFrenetFrames","generateSegment","getPointAt","generateIndices","generateBufferData","tube","heightScale","P1","P2","calculatePositionOnCurve","cu","su","quOverP","cs","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","getFocalLength","getEffectiveFOV","getFilmWidth","isSpriteMaterial","guessSizeSq","addLevel","getObjectForDistance","bone","isBone","getBoneByName","gbone","rotq","scl","vec","skinWeight","computeLineDistances","positionAttribute","linePrecision","precisionSq","vStart","vEnd","interSegment","interRay","nbVertices","localThreshold","localThresholdSq","testPoint","rayPointDistanceSq","distanceToRay","isGroup","readyState","HAVE_CURRENT_DATA","Earcut","holeIndices","invSize","hasHoles","outerLen","outerNode","linkedList","steiner","getLeftmost","compareX","eliminateHole","filterPoints","eliminateHoles","earcutLinked","signedArea","insertNode","removeNode","again","ear","zOrder","prevZ","nextZ","numMerges","pSize","qSize","inSize","sortLinked","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","locallyInside","isValidDiagonal","splitPolygon","hx","hy","mx","my","tanMin","findHoleBridge","leftmost","intersectsPolygon","middleInside","q2","an","bp","isClockWise","pts","triangulateShape","removeDupEndPts","addContour","holeIndex","addShapeList","font","isFont","generateShapes","curveSegments","amount","bevelThickness","bevelSize","bevelEnabled","phiStart","phiLength","thetaStart","thetaLength","thetaEnd","grid","verticesRow","thetaSegments","phiSegments","radiusStep","thetaSegmentLevel","inverseSegments","addShape","shapeHole","indexOffset","extractPoints","shapeVertices","shapeHoles","thresholdAngle","thresholdDot","sourceVertices","face1","face2","radiusTop","radiusBottom","openEnded","indexArray","generateCap","centerIndexStart","centerIndexEnd","cosTheta","sinTheta","slope","indexRow","generateTorso","getArrays","verticesArray","uvAttribute","IndexAttribute","extrudePts","splineTube","binormal","position2","ahole","indicesArray","bevelSegments","steps","extrudePath","extrudeByPath","uvgen","UVGenerator","WorldUVGenerator","getSpacedPoints","shapePoints","scalePt2","vert","vlen","flen","getBevelVec","inPt","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","sf","v_trans_lensq","direction_eq","contourMovements","oneHoleMovements","holesMovements","verticesMovements","sidewalls","layeroffset","slen1","slen2","f4","f3","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","buildLidFaces","buildSideFaces","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","Geometries","freeze","STANDARD","PHYSICAL","TOON","Materials","files","file","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","loading","_parser","arcLengthDivisions","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","aRadius","CubicPoly","initCatmullRom","initNonuniformCatmullRom","dt0","dt1","dt2","load","cached","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","responseType","Blob","request","XMLHttpRequest","callbacks","withCredentials","overrideMimeType","requestHeader","setRequestHeader","setPath","setResponseType","setWithCredentials","setMimeType","loader","loadTexture","texDatas","loaded","mipmapCount","isCubemap","texData","crossOrigin","setCrossOrigin","urls","isJPEG","getPoint","optionalTarget","getUtoTmapping","getPoints","divisions","lengths","getLengths","cacheArcLengths","updateArcLengths","targetArcLength","arcLengths","comparison","lengthBefore","getTangent","pt1","getTangentAt","mat","MAX_VALUE","fromJSON","isEllipseCurve","twoPi","deltaAngle","samePoints","isArcCurve","pz","curveType","QuadraticBezier","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","CubicBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","isCatmullRomCurve3","intPoint","isCubicBezierCurve","isCubicBezierCurve3","isLineCurve","isLineCurve3","isQuadraticBezierCurve","isQuadraticBezierCurve3","isSplineCurve","Curves","autoClose","currentPoint","parameterPositions","sampleValues","sampleSize","resultBuffer","_cachedIndex","valueSize","_weightPrev","_offsetPrev","_weightNext","_offsetNext","startPoint","endPoint","curveLengths","getCurveLengths","segmentLength","lens","cacheLengths","resolution","aCPx","aCPy","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","absarc","absellipse","firstPoint","lastPoint","getPointsHoles","holesPts","ValueTypeName","ValueBufferType","DefaultInterpolation","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","intervalChanged_","interpolate_","DefaultSettings_","getSettings_","copySampleValue_","getValueSize","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","offset1","offset0","weight1","weight0","arraySlice","convertArray","forceClone","getKeyframeOrder","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","TimeBufferType","setInterpolation","validate","optimize","tracks","resetDuration","trackType","_getTrackTypeForValueTypeName","getInterpolation","typeName","InterpolantFactoryMethodDiscrete","factoryMethod","createInterpolant","timeOffset","timeScale","startTime","endTime","nKeys","prevTime","currTime","smoothInterpolation","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","jsonTracks","frameTime","fps","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","pattern","animationMorphTargets","clips","parseAnimation","animation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","morphTargetNames","morphTargetName","animationKey","boneName","setTextures","getTexture","shading","typedArray","TYPED_ARRAYS","drawcalls","BlendingMode","textureLoader","materialLoader","Handlers","handlers","regex","onLoadStart","onLoadProgress","onLoadComplete","initMaterials","texturePath","createMaterial","fullPath","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","decodeText","TextDecoder","extractUrlBase","setTexturePath","isBitSet","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","nUvLayers","parseModel","influencesPerVertex","parseSkin","dstVertices","srcVertices","morphColors","parseMorphing","outputAnimations","morphAnimationClips","parseAnimations","parseShape","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","geometryLoader","bufferGeometryLoader","details","geometryShapes","loadImage","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","createImageBitmap","subPaths","currentPath","createPath","glyph","glyphs","cpx","cpy","cpx1","cpy1","cpx2","cpy2","_cachedOutline","setOptions","imageBitmap","catch","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","solid","holesFirst","tmpPoints","tmpHoles","betterShapeHoles","newShapes","newShapeHoles","mainIdx","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","froms","tos","chars","line_height","yMax","yMin","underlineThickness","createPaths","eyeSep","eyeRight","eyeLeft","webkitAudioContext","setContext","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","gain","createGain","destination","getInput","autoplay","loop","playbackRate","isPlaying","hasPlaybackControl","sourceType","filters","panner","createPanner","fftSize","analyser","createAnalyser","frequencyBinCount","getOutput","mixFunction","_slerp","_select","_lerp","_mixBufferRegion","cumulativeWeight","useCount","referenceCount","decodeAudioData","audioBuffer","xmin","xmax","eyeSepOnProjection","ymax","removeFilter","getFilter","setFilter","getMasterVolume","setMasterVolume","positionX","setValueAtTime","currentTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","setNodeSource","audioNode","setBuffer","play","createBufferSource","onended","onEnded","getFilters","setFilters","setPlaybackRate","getPlaybackRate","getLoop","setLoop","getVolume","setVolume","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","maxDistance","setMaxDistance","getFrequencyData","getByteFrequencyData","getAverageFrequency","accuIndex","currentWeight","mix","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","wordChar","wordCharOrDot","directoryRe","nodeRe","objectRe","propertyRe","trackRe","supportedObjectNames","reservedRe","lineGeometry","coneGeometry","Composite","targetGroup","optionalParsedPath","parsedPath","parseTrackName","_targetGroup","_bindings","subscribe_","rootNode","findNode","nCachedObjects_","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","stats","inUse","bindingsPerObject","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","interpolant","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","_initMemoryManager","_accuIndex","interleavedBuffer","ascSort","intersectObject","autoStart","oldTime","elapsedTime","running","nNormals","objGeometry","cone","getBoneList","boneList","sphereSize","radials","lightPlane","targetLine","pointMap","colorFrustum","colorCone","colorUp","colorTarget","colorCross","addLine","addPoint","headLength","headWidth","setDirection","firstValidIndex","unbind","isAnimationObjectGroup","sanitizeNodeName","objectName","objectIndex","propertyIndex","lastDot","searchNodeSubtree","subTreeNode","_getValue_unavailable","_setValue_unavailable","BindingType","Direct","EntireArray","ArrayElement","HasFromToArray","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","GetterByBindingType","resolvedProperty","SetterByBindingTypeAndVersioning","targetObject","targetArray","sourceArray","nodeProperty","versioning","bindingType","_getValue_unbound","_setValue_unbound","nObjects","nCachedObjects","indicesByUUID","parsedPaths","nBindings","knownObject","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","_activateAction","_deactivateAction","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","halt","startTimeScale","endTimeScale","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","deltaTime","timeDirection","timeRunning","_updateTimeScale","clipTime","_updateTime","_updateWeight","propertyMixers","interpolantValue","loopCount","_setEndings","handle_stop","pingPong","loopDelta","atStart","atEnd","weightNow","weightThen","_bindAction","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","knownActions","_addInactiveAction","_lendBinding","_lendAction","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","actions","controlInterpolants","actionsByClip","actionByRoot","_removeInactiveAction","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","remove_empty_map","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","existingAction","newAction","stopAllAction","nActions","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","isInterleavedBuffer","setFromCamera","intersectObjects","getElapsedTime","getDelta","newTime","makeSafe","vec3","objPos","objNorm","coneLength","coneWidth","boneMatrix","matrixWorldInv","setPoint","setColor","construct","createPointsGeometry","createGeometry","createSpacedPointsGeometry","fromPoints","initFromArray","getControlPointsArray","reparametrizeByArcLength","setColors","isIntersectionBox","isIntersectionSphere","random16","nearestPowerOfTwo","nextPowerOfTwo","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBuffer","applyToVector3Array","extractPosition","getPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","isIntersectionPlane","barycoordFromPoint","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","computeTangents","getChildByName","renderDepth","getWorldRotation","eulerOrder","useQuaternion","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","copyIndicesArray","addIndex","addDrawCall","clearDrawCalls","computeOffsets","wrapAround","wrapRGB","metal","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","shadowMapCullFace","renderReverseSided","renderSingleSided","standing","getData","updateCubeMap","geometry1","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","projectVector","unprojectVector","pickingRay","createMultiMaterialObject","hmr","insertInto","locals","useSourceMap","cssMapping","sourceMapping","sourceMap","sourceURLs","sources","sourceRoot","cssWithMappingToString","mediaQuery","alreadyImportedModules","stylesInDom","isOldIE","getElement","styleTarget","HTMLIFrameElement","contentDocument","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","domStyle","refs","listToStyles","newStyles","part","media","insertStyleElement","lastStyleElementInsertedAtTop","insertAt","removeStyleElement","createStyleElement","nonce","nc","getNonce","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","rel","createLinkElement","autoFixUrls","convertToAbsoluteUrls","oldSrc","styleSheet","newObj","DEBUG","newList","mayRemove","textStore","replaceText","replacement","baseUrl","protocol","currentDir","pathname","fullMatch","origUrl","newUrl","unquotedOrigUrl","$1","GridHeatMapModel","row_align","column_align","null_color","stroke","anchor_style","display_format","font_style","num_rows","num_cols","flat_colors","row_num","col_num","column_num","_cell_num","identify_modes","row_scale","column_scale","data_nrow","data_ncol","registerImmediate","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","script","onreadystatechange","attachEvent","task","firstIndexOf","findFirstValue","lowerBound","begin","middle","upperBound","removeLastOf","removeAllOf","removeFirstWhere","removeLastWhere","iter_1","_cloned","_active","EmptyIterator","FilterIterator","minmax","vmin","vmax","MapIterator","RangeIterator","_start","_stop","_step","rangeLength","RepeatIterator","_count","RetroArrayIterator","topologicSort","sorted","visited","graph","fromNode","toNode","StrideIterator","StringExt","findIndices","query","matchSumOfSquares","matchSumOfDeltas","TakeIterator","ZipIterator","_first","_last","ForwardValueIterator","RetroValueIterator","ForwardNodeIterator","retroNodes","RetroNodeIterator","addFirst","LinkedListNode","insertAfter","removeLast","bt","borderRightWidth","bb","borderBottomWidth","pr","pb","scrollIntoViewIfNeeded","platform","IS_IE","IS_EDGE","specificityCache","calculateSingle","validityCache","testElem","protoMatchFunc","Element","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","NEGATION_RE","ID_RE","CLASS_RE","ATTR_RE","PSEUDO_ELEM_RE","PSEDUO_CLASS_RE","TYPE_RE","IGNORE_RE","boxlayout_1","BoxPanel","CommandPalette","_results","commandChanged","_onGenericChange","keyBindingChanged","refresh","_evtClick","_toggleFocused","inputNode","renderEmptyMessage","category","renderHeader","_execute","_activatePreviousItem","_activateNextItem","focused","activeElement","formatHeader","renderItemIcon","renderItemContent","renderItemShortcut","formatEmptyMessage","renderItemLabel","renderItemCaption","formatItemLabel","formatItemCaption","formatItemShortcut","fuzzySearch","rgx","rgxMatch","categoryIndices","labelIndices","matchType","scoreCmp","localeCompare","rank","spellcheck","CommandItem","scores","matchItems","item_1","createResults","deepArrayEqual","deepObjectEqual","deepArrayCopy","deepObjectCopy","emptyArray","MimeData","_types","_values","hasData","mime","setData","PromiseDelegate","promise","_reject","reason","rng","pseudoRandomBytes","prng","createHmac","algos","algoKeys","hashes","getHashes","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createSign","Sign","createVerify","Verify","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","createCredentials","DH_CHECK_P_NOT_SAFE_PRIME","DH_CHECK_P_NOT_PRIME","DH_UNABLE_TO_CHECK_GENERATOR","DH_NOT_SUITABLE_GENERATOR","NPN_ENABLED","ALPN_ENABLED","RSA_PKCS1_PADDING","RSA_SSLV23_PADDING","RSA_NO_PADDING","RSA_PKCS1_OAEP_PADDING","RSA_X931_PADDING","RSA_PKCS1_PSS_PADDING","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID","b64","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","extraBytes","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","_classCallCheck","localStorage","Sha","rotl30","ft","Sha1","rotl5","Sha224","Sha384","ZERO_BUF","subtle","toBrowser","sha-1","sha-256","sha-384","sha-512","checks","browserPbkdf2","importKey","deriveBits","resolvePromise","prom","checkNative","resp","aesModes","desModes","ebtk","suite","des","des-ede3-cbc","instantiate","des-ede3","des-ede-cbc","des-ede","des-cbc","des-ecb","opts","modeName","_des","des3","ip","inL","inR","outL","outR","rip","pc1","r28shl","pc2table","pc2","sTable","substitute","permuteTable","padSplit","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","inp","inOff","outOff","_encrypt","lStart","rStart","keyL","keyR","CBCState","_cbcInit","_cbcState","superProto","EDEState","k3","_edeState","MODES","AuthCipher","Splitter","_autopadding","thing","PADDING","setTo","padBuff","encryptStart","encryptByte","byteParam","shiftIn","ZEROES","_multiply","lsbVi","Vi","Zi","abl","padded","unpad","autoPadding","generatePrime","DH","ENCODINGS","genc","SEVEN","setPublicKey","pub","_pub","setPrivateKey","_priv","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","checkPrime","__gen","generateKeys","_gen","getPublicKey","computeSecret","secret","getPrime","front","getPrivateKey","getGenerator","verify","algorithms","_hashType","_tag","_signType","sig","EC","getKey","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curveId","keyFromPrivate","toDER","ecSign","dsaSign","minAssert","minUtils","getNAF","naf","getJSF","jsf","u1","u2","m8","m14","m24","cachedProperty","computer","parseBytes","intFromLE","BaseCurve","conf","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","_fixedNafMul","doubles","_getDoubles","repr","nafW","jpoint","mixedAdd","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","pointFromX","encodeCompressed","precompute","_getBeta","_hasDoubles","dbl","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","isRed","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","_getEndoBasis","ntinv","prevR","aprxSqrt","len1","_endoSplit","rhs","_endoWnafMulAdd","npoints","ncoeffs","endoMul","obj2point","isInfinity","ys1","dyinv","mulAdd","jmulAdd","_precompute","zinv","zinv2","pz2","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","yyyy","yyyy8","c8","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","xc","MontCurve","diffAdd","jumlAdd","EdwardsCurve","twisted","mOneA","oneC","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","PresetCurve","defineCurve","sha1_K","SHA1","SHA224","SHA384","Kh","Ah","Bh","Dh","Eh","rh","sh","outer","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","keyFromPublic","fromPublic","genKeyPair","drbg","pers","persEnc","entropy","entropyEnc","ns2","_truncateToN","truncOnly","bkey","getPrivate","ns1","kp","kpX","recoveryParam","canonical","sinv","getPublic","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Qprime","predResist","minEntropy","_reseed","reseedInterval","nonceEnc","_hmac","kmac","reseed","addEnc","_importPrivate","privEnc","_importPublic","pubEnc","derive","_importDER","Position","octetLen","rmPadding","constructLength","octets","slen","backHalf","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","Rencoded","encodePoint","s_","pubBytes","makeSignature","SG","fromSecret","lastIx","xIsOdd","encodeInt","decodeInt","isPoint","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","int","use","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","explicit","ECParameters","choice","namedCurve","Entity","_createNamed","runInThisContext","_initNamed","Object_keys","defineProp","globals","Context","Script","runInContext","display","win","contentWindow","wEval","eval","wExecScript","execScript","runInNewContext","createContext","isContext","createScript","errors","ReporterError","rethrow","pathLen","enterKey","exitKey","leaveKey","enterObject","leaveObject","inherited","wrapResult","captureStackTrace","tags","reverseArgs","useDecoder","_wrap","stateProps","cstate","_useArgs","def","prevObj","present","prevKey","_decodeGeneric","_decodeChoice","_getUse","_encodeChoice","_encodePrimitive","16","17","18","20","21","22","23","24","25","26","28","29","30","pem","PEMDecoder","PEMEncoder","asn","Time","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherKey","match2","checkValue","pubkey","ecVerify","unpacked","montp","dsaVerify","padNum","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","p256","secp256r1","secp192r1","p384","p521","inenc","mgf","withPublic","publicKey","iHash","hLen2","ps","dblen","maskedDb","maskedSeed","oaep","nonZero","pkcs1","zBuffer","dif","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","Token","_tokenStructuralPropertyT","random_1","UUID","uuid4","menu_1","ContextMenu","_idTick","itemCmp","availableItems","docklayout_1","tabbar_1","DockPanel","_drag","_pressData","_layoutModified","_edges","DEFAULT_EDGES","Overlay","createSingleDocumentConfig","LayoutModified","selectWidget","bar","activateWidget","_evtDragEnter","_evtDragLeave","_evtDragOver","_evtDrop","isGeneratedTabBarProperty","_showOverlay","findDropTarget","zone","getDropRef","deltaX","xPos","yPos","tabHeight","tabMoved","_onTabMoved","currentChanged","_onCurrentChanged","tabCloseRequested","_onTabCloseRequested","tabDetachRequested","_onTabDetachRequested","tabActivateRequested","_onTabActivateRequested","_timer","_hidden","geo","panel","panelRect","FocusTracker","_counter","_activeWidget","_currentWidget","_numbers","_nodes","_activeChanged","focusNumber","disposed","_onWidgetDisposed","_setWidgets","_evtFocus","_evtBlur","oldCurrent","oldActive","focusTarget","GridLayout","_rowSpacing","_columnSpacing","_rowStarts","_columnStarts","_rowSizers","_columnSizers","rowCount","reallocSizers","columnCount","rowSpacing","clampValue","columnSpacing","rowStretch","setRowStretch","columnStretch","setColumnStretch","maxRow","maxCol","rowSpanCmp","getCellConfig","rowSpan","distributeMin","columnSpanCmp","columnSpan","fixedRowSpace","fixedColSpace","cellConfigProperty","setCellConfig","normalizeConfig","portion","MenuBar","_menus","openActiveMenu","addMenu","insertMenu","aboutToClose","_onMenuAboutToClose","menuRequested","_onMenuMenuRequested","removeMenu","removeMenuAt","clearMenus","menus","blur","newMenu","activeMenu","oldMenu","ScrollBar","_onRepeat","_repeatTimer","mouseX","mouseY","trackNode","thumbNode","thumbRect","_pageRequested","incrementNode","_stepRequested","decrementNode","_page","_maximum","_thumbMoved","maximum","page","thumbStyle","_moveThumb","findPart","trackPos","trackSpan","trackRect","decrement","increment","thumb","scrollBar","SingletonLayout","_widget","splitlayout_1","SplitPanel","stackedpanel_1","TabPanel","stackedPanel","widgetRemoved","_onWidgetRemoved","_tabPlacement","tabPlacement","directionFromPlacement","orientationFromPlacement","currentWidget","previousWidget","plc","placementToOrientationMap","placementToDirectionMap","AxisModel","grid_lines","label_color","grid_color","tick_style","tick_rotate","validate_orientation","validate_side","save_changes","ColorAxisModel","HandDraw","set_lines_view","mousedown","set_limits","update_line_index","lines_model","mark_index","mark_model","lines_view","mouse_entry","mousemove","mouseup","xindex","line_index","previous_pos","newx","newy","oldx","old_index","nns","new_index","min_x","valid_max","max_x","xy_data","valid_min","Bars","set_internal_scales","dom_scale","range_scale","set_scale_orientation","dom","rang","dom_offset","range_offset","scaleBand","update_colors","update_type","bar_click_handler","base_value","draw_zero_line","adjust_offset","draw_bars","selected_groups","bars","bar_groups","model_domain","bars_sel","bar_labels","transition_name","dom_control","rang_control","dom_max","is_stacked","band_width","y_ref","manageBarLabels","group_dom","rect_coords","offsetVertical","offsetHorizontal","baseLine","barOrientation","barGroups","bandWidth","stackedBarLabels","groupedBarLabels","updateBarLabelsStyle","styleBarLabelTextAnchor","styleBarLabelDominantBaseline","transformBarLabel","displayFormatStr","displayFormat","fonts","fontStyle","styleKey","get_mark_color","get_mark_opacity","avail_space","HandDrawModel","DOMWidgetModel","OHLC","update_stroke","update_opacities","ohlc_click_handler","up_color","down_color","draw_legend_icon","draw_mark_paths","current_range","update_selected_colors","stick","new_sticks","y_index","x_max","dat","headline_top","headline_bottom","to_left_side","scaled_mark_widths","min_x_difference","calculate_mark_width","offset_in_x_units","data_point","head_path_candle","tail_path_candle","body_path_candle","head_path_bar","tail_path_bar","body_path_bar","y_offset","x_offset","min_distance","leg","bottom_y_offset","top_y_offset","markmodel","BarsModel","color_mode","label_display","label_display_format","label_display_font_style","label_display_horizontal_offset","label_display_vertical_offset","is_y_2d","x_elem","y0_neg","y0_left","y_elem","pos_max","neg_max","apply_color_to_groups","single_bar_d","bar_grp_index","bar_d","bar_index","Hist","calc_bar_indices_from_data_idx","update_stroke_and_opacities","bar_width","num_bins","calculate_bar_width","bars_added","bin_pixels","x_bins","calc_data_indices","new_legend","selected_bins","intervals","reduce_intervals","num_intervals","start_index","end_index","start_pixel","end_pixel","bar_indices","OHLCModel","update_format","print_bad_format","min_x_dist","max_y_height","return_val","HistModel","midpoints","normalize_data","x_mid","x_data_ind","create_uniform_bins","save_and_update","x_width","return_dict","bin_start","bin_end","min_val","max_val","step_size","SelectorModel","marks","OneDSelectorModel","TwoDSelectorModel","FastIntervalSelectorModel","IndexSelectorModel","line_width","BrushIntervalSelectorModel","brushing","BrushSelectorModel","selected_x","selected_y","MultiSelectorModel","_selected","show_names","LassoSelectorModel","Boxplot","update_outlier_fill_color","update_box_fill_color","update_box_width","calculate_mark_max_width","plotWidth","get_box_width","selected_stroke","auto_detect_outliers","plotData","outlierData","displayValue","boxUpper","boxLower","boxMedian","iqr","whiskerMax","whiskerMin","MIN_VALUE","plotY","box_click_handler","prepareBoxPlots","parentClass","boxplot","fillcolor","new_boxplots","xOffset","medianY","outliers","mark_width","Selector_1","IndexSelector","create_scales","color_change","initial_click","xpixel","set_selected","invert_pixel","invert_point","colurutils","OrdinalColorScale","BoxplotModel","box_fill_color","outlier_fill_color","box_width","elm","OrdinalScale","outer_padding","pixel_vals","ind","ScatterBase_1","Label","get_element_opacity","get_element_size","update_text","dragged_size","ScatterBaseModel_1","LabelModel","schemeCategory10","rotate_angle","default_size","drag_size","font_unit","font_weight","OrdinalScaleModel_1","OrdinalColorScaleModel","sel_utils","BrushMixinXYSelector","brushsel","convert_and_save","extent_x","extent_y","selector_changed","BrushMixinXSelector","xar","yar","BrushSelector","brush_render","brush_start","brush_move","brush_end","adjust_rectangle","update_mark_selected","pixel_extent_x","pixel_extent_y","sortFunction","empty_selection","range_x","range_y","add_remove_classes","add_classes","remove_classes","r_class","a_class","BrushIntervalSelector","pixel_extent","MultiSelector","curr_index","create_brush","selecting_brush","labels_change","prev_names","get_label","prev_label","new_brush_g","old_handler","brush_g","sel","hide_names","set_text_location","LassoSelector","all_vertices","lasso_counter","drag_move","drag_end","keydown","change_color","lasso","current_vertices","create_new_lasso","lasso_name","lassos_to_delete","PanZoom","mousewheel","scale_views","xscale_views","yscale_views","_mousedown","domains_in_order","get_domain_slice_in_order","_mousemove","mouse_delta","pixel_min","pixel_max","domain_min","domain_max","set_scale_attribute","_zoom","attribute_name","set_date_elem","Axis_1","ColorAxis","vertical","set_scale","bar_height","get_topg_transform","redraw_axis","get_colorbar_transform","axis_line_scale","scaleTime","get_label_transform","colorBar","draw_color_bar","set_axisline_domain","colorSpacing","get_color_bar_width","stop-color","stop-opacity","stroke-width","set_axisline_scale_range","rectangles","PanZoomModel","allow_pan","allow_zoom","snapshot_scales","set_state","scales_states","get_state","utils_1","Pie","pie_g","inner_radius","outer_arc","updateSlices","update_radius","position_center","updateLabels","updatePolylines","click_handler","mid_angle_location","arc_data","mid_angle","d3Pie","_current","display_values","values_format","labelsTransition","polylines","polylinesTransition","PieModel","start_angle","end_angle","font_size","ColorScale_1","DateColorScale","ColorScaleModel_1","DateColorScaleModel","LinearScale_1","DateScale","markers","Scatter","update_names","new_colors","len_opac","get_element_skew","text_loc","drag_color","original_color","DateScaleModel","LinesModel","labels_visibility","line_style","close_path","color_data","y_length","data_length","FlexLineModel","data_len","width_data","width_scale","ScatterModel","default_skew","display_names","names_unique","show_labels","unique_ids","FastIntervalSelector","freeze_but_move","freeze_dont_move","dblclick","int_len","vert_factor","interval_size","LogScale","scaleLog","LogScaleModel","FigureModel","title_style","background_style","legend_style","legend_text","theme","min_aspect_ratio","max_aspect_ratio","pixel_ratio","fig_margin","padding_x","padding_y","map_id","geo_scale","remove_map","transformed_g","fill_g","highlight_g","stroke_g","geodata","fill_g_colorfill","validate_color","zoomed","reset_zoom","hovered_stroke","hovered_stroke_width","hovered_fill","hoverfill","selected_fill","selected_stroke_width","zoomIdentity","change_stroke_color","change_map_color","change_selected","change_selected_fill","change_selected_stroke","mouseover_handler","mouseout_handler","is_object_empty","default_color","Tooltip","update_formats","create_table","update_tooltip","fields","tooltip_formats","fmt","tooltip_table","table_rows","TooltipModel","Lines_1","FlexLine","g_elements","get_element_width","topojson","MapModel","hover_highlight","hovered_styles","stroke_color","selected_styles","map_data","color_data_updated","subunits","update_properties","transformAbsolute","feature$1","topology","absolute","geometryType","stitchArcs","stitchedArcs","emptyIndex","fg","gf","meshArcs","geomsByArc","geom","geoms","cartesianTriangleArea","mergeArcs","polygonsByArc","register","ring$$","component","neighbors","compareArea","indexesByArc","ij","presimplify","triangleArea","transformRelative","heap","down","removed","minAreaHeap","maxArea","GeoScale","set_projection","reset_scale","geoPath","Mercator","Albers","AlbersUSA","EquiRectangular","Orthographic","Gnomonic","Stereographic","GeoScaleModel","MercatorModel","scale_factor","create_projection","geoMercator","attribute_changed","AlbersModel","geoAlbers","AlbersUSAModel","geoAlbersUsa","EquiRectangularModel","geoEquirectangular","OrthographicModel","clip_angle","geoOrthographic","GnomonicModel","geoGnomonic","StereographicModel","geoStereographic","Figure_1","MarketMap","set_top_el_style","row_groups","enable_select","set_area_dimensions","fig_map","fig_click","fig_hover","fig_names","pointer-events","freeze_tooltip_loc","update_default_tooltip","create_scale_views","draw_group_names","create_tooltip_widget","column_width","row_height","prev_x","prev_y","y_direction","x_direction","group_iter","recolor_chart","colors_updated","show_groups","update_selected_stroke","update_hovered_stroke","update_font_style","clear_selected","apply_selected","compute_dimensions_and_draw","draw_map","ref_data","group_data","display_text","num_colors","colors_map","get_color","mapped_data","grouped_data","running_sums","color_scale_model","num_items","set_row_limits","tooltip_fields","set_scales","update_map_colors","reset_drawing_controls","rect_groups","get_group_transform","end_points","return_arr","get_new_cords","get_end_points","element_count","new_groups","get_cell_transform","cell_click_handler","mousemove_handler","create_bounding_path","end_point","min_y","flex-direction","align-content","align-items","justify-content","word-wrap","clientRects","selected_cell","past_border_y","past_border_x","new_x","new_y","row_limits","num_cells","start_col","start_row","top_row","bottom_row","across","init_x","init_y","current_row","rows_remaining","cols_remaining","elem_remaining","calc_end_point_source","elem_filled","calc_end_point_dest","no_cont_cols","leftover_elem","editing_copy","other_prop","curr_elem","max_iter","final_val","filtered_array","min_elem","max_elem","lesser_arr","greater_arr","curr_x","curr_y","GridHeatMap","row_range","col_scale","current_pixels","min_diff","diffs","new_pixel","new_end","new_start","update_opacity","_cell_nums_from_indices","row_index","anchor_cell_index","col_index","cell_num","_filter_cells_by_cell_num","get_element_fill","display_cells","cell_numbers","selected_elements","unselected_elements","selected_cell_nums","unsel_cell_nums","anchor_num","anchor_element","col_indices","row_indices","sel_cols","column_pixels","sel_rows","row_pixels","row_start_aligned","col_start_aligned","new_domain","expand_scale_domain","row_plot_data","get_tile_plotting_data","column_plot_data","widths","display_rows","col_nums","display_cell_labels","display_format_str","start_points","pixel_points","is_positive","MarketMapModel","map_width","map_height","map_margin","preserve_aspect","group_stroke","tooltip_widget","HeatMap","x_range","plottingData","getPlottingData","totalWidth","totalHeight","heights","yOrigin","yStartPoints","xOrigin","xStartPoints","getElementFill","expandRect","drawCanvas","xData","yData","xReverse","yReverse","getPadding","computeRectSizes","numCols","numRows","padding1","padding2","reversed","HeatMapModel","ToolbarModel","_panning","_panzoom","cached_interaction","panzoom","_create_panzoom_model","reset_scales","widget_manager","new_widget","model_name","model_module","model_module_version","view_name","view_module","view_module_version","x_scales","y_scales","Toolbar","onclick","panzoomicon","refreshicon","_save","saveicon","GraphModel","node_data","shape_attrs","new_attrs","get_shape_attrs","xval","yval","link_color_scale","link_color","link_data","link_matrix","update_node_data","update_link_data","data_scale_key_map","Graph","force_layout","forceLink","link_color_scale_updated","update_charge","update_link_distance","data_updated","getBBox","forceSimulation","forceCenter","forceManyBody","directed","link_width","dragstarted","dragged","dragended","get_node_color","xloc","hover_handler","link_dist","linkDistance","charge","midx","midy","link_type","link_path_func","link_arc","link_line","link_slant_line","update_image","data_message","click_x","click_y","x_scaled","y_scaled","img_send_message","ImageModel","to_float_array","iterator","array32","color_to_array_rgba","color_name","create_colormap","colormap_array","rgb_str","rgb_arr","colormap_arr","colormap_texture","AttributeParameters","item_size","mesh_per_attribute","ColorAttributeParameters","use_colormap","SelectionAttributeParameters","use_selection","ScatterGL","transitions","invalidated_pixel_position","instanced_geometry","scatter_material","domain_x","domain_y","domain_z","domain_size","domain_color","domain_rotation","domain_opacity","range_z","range_size","range_rotation","range_opacity","animation_time_x","animation_time_y","animation_time_z","animation_time_size","animation_time_color","animation_time_rotation","animation_time_opacity","has_selection","has_hover","has_selected_fill","has_selected_stroke","has_selected_opacity","has_unselected_fill","has_unselected_stroke","has_unselected_opacity","has_hovered_fill","has_hovered_stroke","has_hovered_opacity","has_unhovered_fill","has_unhovered_stroke","has_unhovered_opacity","selected_opacity","unselected_fill","unselected_stroke","unselected_opacity","hovered_opacity","unhovered_fill","unhovered_stroke","unhovered_opacity","default_stroke_color","colormap","marker_scale","x_parameters","initialize_attribute","x_previous","y_parameters","y_previous","markers_number","color_parameters","get_color_attribute_parameters","opacity_parameters","get_opacity_attribute_parameters","opacity_previous","size_parameters","get_size_attribute_parameters","size_previous","rotation_parameters","get_rotation_attribute_parameters","rotation_previous","selected_parameters","get_selected_attribute_parameters","update_scene","style_type","style_property","transitions_todo","is_done","update_x","update_y","update_size","update_rotation","sync_visible","sync_fill","new_parameters","value_previous","after_animation","update_attribute","animate_attribute","rerender","x_array","new_markers_number","update_markers_number","update_attributes","y_array","old_markers_number","invalidate_pixel_position","update_pixel_position","pixel_x","pixel_y","trottled_selector_changed","_real_selector_changed","ensure_pixel_position","selection_mask","update_color_map","on_done","time_start","cancelled","called_on_done","ScatterGLModel"],"mappings":"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CAC,YAAA,SACAC,YAAA,QACAC,QAAA,SACAC,UAAA,SACAC,WAAA,SACAC,KAAA,SACAC,UAAA,SACAC,KAAA,QACAC,MAAA,MACAC,YAAA,SACAC,KAAA,QACAC,SAAA,SACAC,QAAA,SACAC,UAAA,SACAC,OAAA,QACAC,MAAA,SACAC,MAAA,SACAC,SAAA,SACAC,cAAA,SACAC,UAAA,QACAC,aAAA,SACAC,UAAA,SACAC,WAAA,SACAC,UAAA,SACAC,qBAAA,SACAC,UAAA,SACAC,WAAA,QACAC,UAAA,SACAC,UAAA,SACAC,YAAA,SACAC,cAAA,QACAC,aAAA,QACAC,eAAA,QACAC,eAAA,QACAC,eAAA,SACAC,YAAA,SACAC,KAAA,MACAC,UAAA,QACAC,MAAA,SACAC,QAAA,SACAC,OAAA,QACAC,iBAAA,QACAC,WAAA,IACAC,aAAA,SACAC,aAAA,QACAC,eAAA,QACAC,gBAAA,QACAC,kBAAA,MACAC,gBAAA,QACAC,gBAAA,SACAC,aAAA,QACAC,UAAA,SACAC,UAAA,SACAC,SAAA,SACAC,YAAA,SACAC,KAAA,IACAC,QAAA,SACAC,MAAA,QACAC,UAAA,QACAC,OAAA,SACAC,UAAA,SACAC,OAAA,SACAC,cAAA,SACAC,UAAA,SACAC,cAAA,SACAC,cAAA,SACAC,WAAA,SACAC,UAAA,SACAC,KAAA,SACAC,KAAA,SACAC,KAAA,SACAC,WAAA,SACAC,OAAA,QACAC,cAAA,QACApnB,IAAA,SACAqnB,UAAA,SACAC,UAAA,QACAC,YAAA,QACAC,OAAA,SACAC,WAAA,SACAC,SAAA,QACAC,SAAA,SACAC,OAAA,SACAC,OAAA,SACAC,QAAA,QACAC,UAAA,QACAC,UAAA,QACAC,UAAA,QACAC,KAAA,SACAC,YAAA,MACAC,UAAA,QACA35D,IAAA,SACA45D,KAAA,MACAC,QAAA,SACAC,OAAA,SACAC,UAAA,QACAC,OAAA,SACAC,MAAA,SACAC,MAAA,SACAC,WAAA,SACAC,OAAA,SACAC,YAAA,UAee,SAAAC,EAAAtnE,GACf,IAAAha,EAEA,OADAga,KAAA,IAAAvS,OAAA85E,eAC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oF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,KACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,KACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,KACjBqoF,EAASroF,EAAQ,KACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,KACjBqoF,EAASroF,EAAQ,KACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,KACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,KACjBqoF,EAASroF,EAAQ,KACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACjBqoF,EAASroF,EAAQ,MACj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A,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,kEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,kEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,kEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,kEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,kEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,sEAIAgrT,IAAA,CACA9hO,IAAA,EACAlpF,OAAA,CACA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,kEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,kEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,kEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,kEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,iEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,kEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,mEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,oEAEA,CACA,mEACA,qGCrwBA,IAAA+1E,EAAS3oF,EAAQ,IACjBmnU,EAAennU,EAAQ,KACvB45G,EAAe55G,EAAQ,IAEvBuoF,EADAqxB,EAAAE,MACAvxB,OAEA6+O,EAAcpnU,EAAQ,KACtBqnU,EAAgBrnU,EAAQ,KAExB,SAAAw8T,EAAAnrP,GACA,KAAAnuE,gBAAAs5T,GACA,WAAAA,EAAAnrP,GAGA,iBAAAA,IACAkX,EAAAqxB,EAAAG,OAAA93G,eAAAovE,GAAA,iBAAAA,GAEAA,EAAAuoC,EAAAG,OAAA1oC,IAIAA,aAAAuoC,EAAAG,OAAAssN,c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","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 147);\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import creator from \"./creator\";\nimport select from \"./select\";\n\nexport default function(name) {\n return select(creator(name).call(document.documentElement));\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([selector == null ? [] : selector], root);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches) {\n if (touches == null) touches = sourceEvent().touches;\n\n for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n points[i] = point(node, touches[i]);\n }\n\n return points;\n}\n","export {default as create} from \"./create\";\nexport {default as creator} from \"./creator\";\nexport {default as local} from \"./local\";\nexport {default as matcher} from \"./matcher\";\nexport {default as mouse} from \"./mouse\";\nexport {default as namespace} from \"./namespace\";\nexport {default as namespaces} from \"./namespaces\";\nexport {default as clientPoint} from \"./point\";\nexport {default as select} from \"./select\";\nexport {default as selectAll} from \"./selectAll\";\nexport {default as selection} from \"./selection/index\";\nexport {default as selector} from \"./selector\";\nexport {default as selectorAll} from \"./selectorAll\";\nexport {styleValue as style} from \"./selection/style\";\nexport {default as touch} from \"./touch\";\nexport {default as touches} from \"./touches\";\nexport {default as window} from \"./window\";\nexport {event, customEvent} from \"./selection/on\";\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(array, f) {\n if (f == null) f = pair;\n var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = f(p, p = array[++i]);\n return pairs;\n}\n\nexport function pair(a, b) {\n return [a, b];\n}\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","import number from \"./number\";\n\nexport default function(values, valueof) {\n var n = values.length,\n m = 0,\n i = -1,\n mean = 0,\n value,\n delta,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n\n if (m > 1) return sum / (m - 1);\n}\n","import variance from \"./variance\";\n\nexport default function(array, f) {\n var v = variance(array, f);\n return v ? Math.sqrt(v) : v;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n return [min, max];\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return x;\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import {slice} from \"./array\";\nimport bisect from \"./bisect\";\nimport constant from \"./constant\";\nimport extent from \"./extent\";\nimport identity from \"./identity\";\nimport range from \"./range\";\nimport {tickStep} from \"./ticks\";\nimport sturges from \"./threshold/sturges\";\n\nexport default function() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n var i,\n n = data.length,\n x,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n tz = tickStep(x0, x1, tz);\n tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n }\n\n // Remove any thresholds outside the domain.\n var m = tz.length;\n while (tz[0] <= x0) tz.shift(), --m;\n while (tz[m - 1] > x1) tz.pop(), --m;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n for (i = 0; i < n; ++i) {\n x = values[i];\n if (x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n };\n\n return histogram;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","import {map} from \"../array\";\nimport ascending from \"../ascending\";\nimport number from \"../number\";\nimport quantile from \"../quantile\";\n\nexport default function(values, min, max) {\n values = map.call(values, number).sort(ascending);\n return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n}\n","import deviation from \"../deviation\";\n\nexport default function(values, min, max) {\n return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n return max;\n}\n","import number from \"./number\";\n\nexport default function(values, valueof) {\n var n = values.length,\n m = n,\n i = -1,\n value,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) sum += value;\n else --m;\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;\n else --m;\n }\n }\n\n if (m) return sum / m;\n}\n","import ascending from \"./ascending\";\nimport number from \"./number\";\nimport quantile from \"./quantile\";\n\nexport default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n numbers = [];\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) {\n numbers.push(value);\n }\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) {\n numbers.push(value);\n }\n }\n }\n\n return quantile(numbers.sort(ascending), 0.5);\n}\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n\n return min;\n}\n","export default function(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n}\n","import ascending from \"./ascending\";\n\nexport default function(values, compare) {\n if (!(n = values.length)) return;\n var n,\n i = 0,\n j = 0,\n xi,\n xj = values[j];\n\n if (compare == null) compare = ascending;\n\n while (++i < n) {\n if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n xj = xi, j = i;\n }\n }\n\n if (compare(xj, xj) === 0) return j;\n}\n","export default function(array, i0, i1) {\n var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n\n return array;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n }\n }\n\n else {\n while (++i < n) {\n if (value = +valueof(values[i], i, values)) sum += value;\n }\n }\n\n return sum;\n}\n","import min from \"./min\";\n\nexport default function(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n}\n\nfunction length(d) {\n return d.length;\n}\n","import transpose from \"./transpose\";\n\nexport default function() {\n return transpose(arguments);\n}\n","export {default as bisect, bisectRight, bisectLeft} from \"./bisect\";\nexport {default as ascending} from \"./ascending\";\nexport {default as bisector} from \"./bisector\";\nexport {default as cross} from \"./cross\";\nexport {default as descending} from \"./descending\";\nexport {default as deviation} from \"./deviation\";\nexport {default as extent} from \"./extent\";\nexport {default as histogram} from \"./histogram\";\nexport {default as thresholdFreedmanDiaconis} from \"./threshold/freedmanDiaconis\";\nexport {default as thresholdScott} from \"./threshold/scott\";\nexport {default as thresholdSturges} from \"./threshold/sturges\";\nexport {default as max} from \"./max\";\nexport {default as mean} from \"./mean\";\nexport {default as median} from \"./median\";\nexport {default as merge} from \"./merge\";\nexport {default as min} from \"./min\";\nexport {default as pairs} from \"./pairs\";\nexport {default as permute} from \"./permute\";\nexport {default as quantile} from \"./quantile\";\nexport {default as range} from \"./range\";\nexport {default as scan} from \"./scan\";\nexport {default as shuffle} from \"./shuffle\";\nexport {default as sum} from \"./sum\";\nexport {default as ticks, tickIncrement, tickStep} from \"./ticks\";\nexport {default as transpose} from \"./transpose\";\nexport {default as variance} from \"./variance\";\nexport {default as zip} from \"./zip\";\n","export var name = \"d3\";\nexport var version = \"5.9.2\";\nexport var description = \"Data-Driven Documents\";\nexport var keywords = [\"dom\",\"visualization\",\"svg\",\"animation\",\"canvas\"];\nexport var homepage = \"https://d3js.org\";\nexport var license = \"BSD-3-Clause\";\nexport var author = {\"name\":\"Mike Bostock\",\"url\":\"https://bost.ocks.org/mike\"};\nexport var main = \"dist/d3.node.js\";\nexport var unpkg = \"dist/d3.min.js\";\nexport var jsdelivr = \"dist/d3.min.js\";\nexport var module = \"index.js\";\nexport var repository = {\"type\":\"git\",\"url\":\"https://github.com/d3/d3.git\"};\nexport var scripts = {\"pretest\":\"rimraf dist && mkdir dist && json2module package.json > dist/package.js && node rollup.node\",\"test\":\"tape 'test/**/*-test.js'\",\"prepublishOnly\":\"yarn test && rollup -c\",\"postpublish\":\"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \\\"d3 ${npm_package_version}\\\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \\\"${npm_package_version}\\\" && git tag -am \\\"${npm_package_version}\\\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js\"};\nexport var devDependencies = {\"json2module\":\"0.0\",\"rimraf\":\"2\",\"rollup\":\"0.64\",\"rollup-plugin-ascii\":\"0.0\",\"rollup-plugin-node-resolve\":\"3\",\"rollup-plugin-terser\":\"1\",\"tape\":\"4\"};\nexport var dependencies = {\"d3-array\":\"1\",\"d3-axis\":\"1\",\"d3-brush\":\"1\",\"d3-chord\":\"1\",\"d3-collection\":\"1\",\"d3-color\":\"1\",\"d3-contour\":\"1\",\"d3-dispatch\":\"1\",\"d3-drag\":\"1\",\"d3-dsv\":\"1\",\"d3-ease\":\"1\",\"d3-fetch\":\"1\",\"d3-force\":\"1\",\"d3-format\":\"1\",\"d3-geo\":\"1\",\"d3-hierarchy\":\"1\",\"d3-interpolate\":\"1\",\"d3-path\":\"1\",\"d3-polygon\":\"1\",\"d3-quadtree\":\"1\",\"d3-random\":\"1\",\"d3-scale\":\"2\",\"d3-scale-chromatic\":\"1\",\"d3-selection\":\"1\",\"d3-shape\":\"1\",\"d3-time\":\"1\",\"d3-time-format\":\"2\",\"d3-timer\":\"1\",\"d3-transition\":\"1\",\"d3-voronoi\":\"1\",\"d3-zoom\":\"1\"};\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(target, type, selection) {\n this.target = target;\n this.type = type;\n this.selection = selection;\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {customEvent, event, mouse, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant\";\nimport BrushEvent from \"./event\";\nimport noevent, {nopropagation} from \"./noevent\";\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nvar X = {\n name: \"x\",\n handles: [\"e\", \"w\"].map(type),\n input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"].map(type),\n input: function(xy) { return xy; },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n return brush(X);\n}\n\nexport function brushY() {\n return brush(Y);\n}\n\nexport default function() {\n return brush(XY);\n}\n\nfunction brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n listeners = dispatch(brush, \"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\")\n .on(\"mousedown.brush touchstart.brush\", started);\n }\n\n brush.move = function(group, selection) {\n if (group.selection) {\n group\n .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && empty(selection1) ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 && selection1 ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 == null || empty(selection1) ? null : selection1;\n redraw.call(that);\n emit.start().brush().end();\n });\n }\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args) {\n return that.__brush.emitter || new Emitter(that, args);\n }\n\n function Emitter(that, args) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function() {\n if (this.starting) this.starting = false, this.emit(\"start\");\n return this;\n },\n brush: function() {\n this.emit(\"brush\");\n return this;\n },\n end: function() {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n return this;\n },\n emit: function(type) {\n customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function started() {\n if (event.touches) { if (event.changedTouches.length < event.touches.length) return noevent(); }\n else if (touchending) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx,\n dy,\n moving,\n shifting = signX && signY && event.shiftKey,\n lockX,\n lockY,\n point0 = mouse(that),\n point = point0,\n emit = emitter(that, arguments).beforestart();\n\n if (type === \"overlay\") {\n state.selection = selection = [\n [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n ];\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n group\n .on(\"touchmove.brush\", moved, true)\n .on(\"touchend.brush touchcancel.brush\", ended, true);\n } else {\n var view = select(event.view)\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n\n dragDisable(event.view);\n }\n\n nopropagation();\n interrupt(that);\n redraw.call(that);\n emit.start();\n\n function moved() {\n var point1 = mouse(that);\n if (shifting && !lockX && !lockY) {\n if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n else lockX = true;\n }\n point = point1;\n moving = true;\n noevent();\n move();\n }\n\n function move() {\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush();\n }\n }\n\n function ended() {\n nopropagation();\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n group.on(\"touchmove.brush touchend.brush touchcancel.brush\", null);\n } else {\n dragEnable(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end();\n }\n\n function keydowned() {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move();\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n\n function keyupped() {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move();\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move();\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = extent.apply(this, arguments);\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n","export var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\n","import {range} from \"d3-array\";\nimport {max, tau} from \"./math\";\n\nfunction compareValue(compare) {\n return function(a, b) {\n return compare(\n a.source.value + a.target.value,\n b.source.value + b.target.value\n );\n };\n}\n\nexport default function() {\n var padAngle = 0,\n sortGroups = null,\n sortSubgroups = null,\n sortChords = null;\n\n function chord(matrix) {\n var n = matrix.length,\n groupSums = [],\n groupIndex = range(n),\n subgroupIndex = [],\n chords = [],\n groups = chords.groups = new Array(n),\n subgroups = new Array(n * n),\n k,\n x,\n x0,\n dx,\n i,\n j;\n\n // Compute the sum.\n k = 0, i = -1; while (++i < n) {\n x = 0, j = -1; while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(range(n));\n k += x;\n }\n\n // Sort groups…\n if (sortGroups) groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n\n // Sort subgroups…\n if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n\n // Convert the sum to scaling factor for [0, 2pi].\n // TODO Allow start and end angle to be specified?\n // TODO Allow padding to be specified as percentage?\n k = max(0, tau - padAngle * n) / k;\n dx = k ? padAngle : tau / n;\n\n // Compute the start and end angle for each group and subgroup.\n // Note: Opera has a bug reordering object literal properties!\n x = 0, i = -1; while (++i < n) {\n x0 = x, j = -1; while (++j < n) {\n var di = groupIndex[i],\n dj = subgroupIndex[di][j],\n v = matrix[di][dj],\n a0 = x,\n a1 = x += v * k;\n subgroups[dj * n + di] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += dx;\n }\n\n // Generate chords for each (non-empty) subgroup-subgroup link.\n i = -1; while (++i < n) {\n j = i - 1; while (++j < n) {\n var source = subgroups[j * n + i],\n target = subgroups[i * n + j];\n if (source.value || target.value) {\n chords.push(source.value < target.value\n ? {source: target, target: source}\n : {source: source, target: target});\n }\n }\n }\n\n return sortChords ? chords.sort(sortChords) : chords;\n }\n\n chord.padAngle = function(_) {\n return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n };\n\n chord.sortGroups = function(_) {\n return arguments.length ? (sortGroups = _, chord) : sortGroups;\n };\n\n chord.sortSubgroups = function(_) {\n return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n };\n\n chord.sortChords = function(_) {\n return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n };\n\n return chord;\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport {cos, halfPi, sin} from \"./math\";\nimport {path} from \"d3-path\";\n\nfunction defaultSource(d) {\n return d.source;\n}\n\nfunction defaultTarget(d) {\n return d.target;\n}\n\nfunction defaultRadius(d) {\n return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n return d.endAngle;\n}\n\nexport default function() {\n var source = defaultSource,\n target = defaultTarget,\n radius = defaultRadius,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n argv = slice.call(arguments),\n s = source.apply(this, argv),\n t = target.apply(this, argv),\n sr = +radius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - halfPi,\n sa1 = endAngle.apply(this, argv) - halfPi,\n sx0 = sr * cos(sa0),\n sy0 = sr * sin(sa0),\n tr = +radius.apply(this, (argv[0] = t, argv)),\n ta0 = startAngle.apply(this, argv) - halfPi,\n ta1 = endAngle.apply(this, argv) - halfPi;\n\n if (!context) context = buffer = path();\n\n context.moveTo(sx0, sy0);\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n context.quadraticCurveTo(0, 0, sx0, sy0);\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n ribbon.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : radius;\n };\n\n ribbon.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\n };\n\n ribbon.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\n };\n\n ribbon.source = function(_) {\n return arguments.length ? (source = _, ribbon) : source;\n };\n\n ribbon.target = function(_) {\n return arguments.length ? (target = _, ribbon) : target;\n };\n\n ribbon.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n };\n\n return ribbon;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(a, b) {\n return a - b;\n}\n","export default function(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array\";\nimport ascending from \"./ascending\";\nimport area from \"./area\";\nimport constant from \"./constant\";\nimport contains from \"./contains\";\nimport noop from \"./noop\";\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nexport default function() {\n var dx = 1,\n dy = 1,\n threshold = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = extent(values), start = domain[0], stop = domain[1];\n tz = tickStep(start, stop, tz);\n tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\nexport default function() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (+x(d, i, data) + o) >> k,\n yi = (+y(d, i, data) + o) >> k,\n wi = +weight(d, i, data);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += wi;\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = max(values0);\n tz = tickStep(0, stop, tz);\n tz = range(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n}\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\n","export default function autoType(object) {\n for (var key in object) {\n var value = object[key].trim(), number;\n if (!value) value = null;\n else if (value === \"true\") value = true;\n else if (value === \"false\") value = false;\n else if (value === \"NaN\") value = NaN;\n else if (!isNaN(number = +value)) value = number;\n else if (/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/.test(value)) value = new Date(value);\n else continue;\n object[key] = value;\n }\n return object;\n}\n","function responseBlob(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.blob();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n","function responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.arrayBuffer();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n","function responseJson(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.json();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseJson);\n}\n","import text from \"./text\";\n\nfunction parser(type) {\n return function(input, init) {\n return text(input, init).then(function(text) {\n return (new DOMParser).parseFromString(text, type);\n });\n };\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","export default function(x, y) {\n var nodes;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n return (Math.random() - 0.5) * 1e-6;\n}\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\nimport tree_y, {defaultY} from \"./y\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {quadtree} from \"d3-quadtree\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {map} from \"d3-collection\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"missing: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle();\n y = target.y + target.vy - source.y - source.vy || jiggle();\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = map(nodes, id),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {map} from \"d3-collection\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\");\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.each(function (force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {quadtree} from \"d3-quadtree\";\nimport {x, y} from \"./simulation\";\n\nexport default function() {\n var nodes,\n node,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant\";\n\nexport default function(radius, x, y) {\n var nodes,\n strength = constant(0.1),\n strengths,\n radiuses;\n\n if (typeof radius !== \"function\") radius = constant(+radius);\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force(alpha) {\n for (var i = 0, n = nodes.length; i < n; ++i) {\n var node = nodes[i],\n dx = node.x - x || 1e-6,\n dy = node.y - y || 1e-6,\n r = Math.sqrt(dx * dx + dy * dy),\n k = (radiuses[i] - r) * strengths[i] * alpha / r;\n node.vx += dx * k;\n node.vy += dy * k;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n radiuses = new Array(n);\n for (i = 0; i < n; ++i) {\n radiuses[i] = +radius(nodes[i], i, nodes);\n strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _, initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n","import constant from \"./constant\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, degrees, epsilon, epsilon2, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = sqrt(cx * cx + cy * cy + cz * cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n stream(object, centroidStream);\n\n var x = X2,\n y = Y2,\n z = Z2,\n m = x * x + y * y + z * z;\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y) {\n line.push([x, y]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer\";\nimport clipRejoin from \"./rejoin\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian\";\nimport {circleStream} from \"../circle\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math\";\nimport pointEqual from \"../pointEqual\";\nimport clip from \"./index\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"../math\";\nimport clipBuffer from \"./buffer\";\nimport clipLine from \"./line\";\nimport clipRejoin from \"./rejoin\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","import clipRectangle from \"./rectangle\";\n\nexport default function() {\n var x0 = 0,\n y0 = 0,\n x1 = 960,\n y1 = 500,\n cache,\n cacheStream,\n clip;\n\n return clip = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","import length from \"./length\";\n\nvar coordinates = [null, null],\n object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length(object);\n}\n","import {default as polygonContains} from \"./polygonContains\";\nimport {default as distance} from \"./distance\";\nimport {epsilon, radians} from \"./math\";\n\nvar containsObjectType = {\n Feature: function(object, point) {\n return containsGeometry(object.geometry, point);\n },\n FeatureCollection: function(object, point) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n return false;\n }\n};\n\nvar containsGeometryType = {\n Sphere: function() {\n return true;\n },\n Point: function(object, point) {\n return containsPoint(object.coordinates, point);\n },\n MultiPoint: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n return false;\n },\n LineString: function(object, point) {\n return containsLine(object.coordinates, point);\n },\n MultiLineString: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsLine(coordinates[i], point)) return true;\n return false;\n },\n Polygon: function(object, point) {\n return containsPolygon(object.coordinates, point);\n },\n MultiPolygon: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n return false;\n },\n GeometryCollection: function(object, point) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n return false;\n }\n};\n\nfunction containsGeometry(geometry, point) {\n return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n ? containsGeometryType[geometry.type](geometry, point)\n : false;\n}\n\nfunction containsPoint(coordinates, point) {\n return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n var ab = distance(coordinates[0], coordinates[1]),\n ao = distance(coordinates[0], point),\n ob = distance(point, coordinates[1]);\n return ao + ob <= ab + epsilon;\n}\n\nfunction containsPolygon(coordinates, point) {\n return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n return [point[0] * radians, point[1] * radians];\n}\n\nexport default function(object, point) {\n return (object && containsObjectType.hasOwnProperty(object.type)\n ? containsObjectType[object.type]\n : containsGeometry)(object, point);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math\";\n\nexport default function(a, b) {\n var x0 = a[0] * radians,\n y0 = a[1] * radians,\n x1 = b[0] * radians,\n y1 = b[1] * radians,\n cy0 = cos(y0),\n sy0 = sin(y0),\n cy1 = cos(y1),\n sy1 = sin(y1),\n kx0 = cy0 * cos(x0),\n ky0 = cy0 * sin(x0),\n kx1 = cy1 * cos(x1),\n ky1 = cy1 * sin(x1),\n d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n k = sin(d);\n\n var interpolate = d ? function(t) {\n var B = sin(t *= d) / k,\n A = sin(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n z = A * sy0 + B * sy1;\n return [\n atan2(y, x) * degrees,\n atan2(z, sqrt(x * x + y * y)) * degrees\n ];\n } : function() {\n return [x0 * degrees, y0 * degrees];\n };\n\n interpolate.distance = d;\n\n return interpolate;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","export default function(x) {\n return x;\n}\n","import noop from \"../noop\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math\";\nimport noop from \"../noop\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity\";\nimport stream from \"../stream\";\nimport pathArea from \"./area\";\nimport pathBounds from \"./bounds\";\nimport pathCentroid from \"./centroid\";\nimport PathContext from \"./context\";\nimport pathMeasure from \"./measure\";\nimport PathString from \"./string\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream\";\nimport boundsStream from \"../path/bounds\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport clipRectangle from \"../clip/rectangle\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n function transform(x, y) {\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k, (dy - y) / k];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math\";\nimport {projectionMutator} from \"./index\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y;\n return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math\";\nimport albers from \"./albers\";\nimport conicEqualArea from \"./conicEqualArea\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math\";\nimport rotation from \"../rotation\";\nimport projection from \"./index\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pow, sign, sin, sqrt, tan} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {mercatorRaw} from \"./mercator\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {equirectangularRaw} from \"./equirectangular\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y;\n return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import clipRectangle from \"../clip/rectangle\";\nimport identity from \"../identity\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\n\nfunction scaleTranslate(kx, ky, tx, ty) {\n return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({\n point: function(x, y) {\n this.stream.point(x * kx + tx, y * ky + ty);\n }\n });\n}\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity, // scale, translate and reflect\n x0 = null, y0, x1, y1, // clip extent\n postclip = identity,\n cache,\n cacheStream,\n projection;\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return projection = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n },\n postclip: function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n },\n clipExtent: function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n },\n scale: function(_) {\n return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n },\n translate: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n },\n reflectX: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n },\n reflectY: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n },\n fitExtent: function(extent, object) {\n return fitExtent(projection, extent, object);\n },\n fitSize: function(size, object) {\n return fitSize(projection, size, object);\n },\n fitWidth: function(width, object) {\n return fitWidth(projection, width, object);\n },\n fitHeight: function(height, object) {\n return fitHeight(projection, height, object);\n }\n };\n}\n","import projection from \"./index\";\nimport {abs, epsilon} from \"../math\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math\";\nimport {mercatorProjection} from \"./mercator\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count\";\nimport node_each from \"./each\";\nimport node_eachBefore from \"./eachBefore\";\nimport node_eachAfter from \"./eachAfter\";\nimport node_sum from \"./sum\";\nimport node_sort from \"./sort\";\nimport node_path from \"./path\";\nimport node_ancestors from \"./ancestors\";\nimport node_descendants from \"./descendants\";\nimport node_leaves from \"./leaves\";\nimport node_links from \"./links\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","export default function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import {shuffle, slice} from \"../array\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import enclose from \"./enclose\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = circles.length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import {packEnclose} from \"./siblings\";\nimport {optional} from \"../accessors\";\nimport constant, {constantZero} from \"../constant\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./treemap/round\";\nimport treemapDice from \"./treemap/dice\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import {required} from \"./accessors\";\nimport {Node, computeHeight} from \"./hierarchy/index\";\n\nvar keyPrefix = \"$\", // Protect against keys like “__proto__”.\n preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var d,\n i,\n n = data.length,\n root,\n parent,\n node,\n nodes = new Array(n),\n nodeId,\n nodeKey,\n nodeByKey = {};\n\n for (i = 0; i < n; ++i) {\n d = data[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = keyPrefix + (node.id = nodeId);\n nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], nodeId = parentId(data[i], i, data);\n if (nodeId == null || !(nodeId += \"\")) {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n } else {\n parent = nodeByKey[keyPrefix + nodeId];\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n","import {Node} from \"./hierarchy/index\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import roundNode from \"./round\";\nimport squarify from \"./squarify\";\nimport {required} from \"../accessors\";\nimport constant, {constantZero} from \"../constant\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice\";\nimport slice from \"./slice\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\nimport {phi, squarifyRatio} from \"./squarify\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n a,\n b = polygon[n - 1],\n area = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n}\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n x = 0,\n y = 0,\n a,\n b = polygon[n - 1],\n c,\n k = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n k += c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n\n return k *= 3, [x / k, y / k];\n}\n","// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\n// negative if clockwise, and zero if the points are collinear.\nexport default function(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n}\n","import cross from \"./cross\";\n\nfunction lexicographicOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n var n = points.length,\n indexes = [0, 1],\n size = 2;\n\n for (var i = 2; i < n; ++i) {\n while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n indexes[size++] = i;\n }\n\n return indexes.slice(0, size); // remove popped points\n}\n\nexport default function(points) {\n if ((n = points.length) < 3) return null;\n\n var i,\n n,\n sortedPoints = new Array(n),\n flippedPoints = new Array(n);\n\n for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n sortedPoints.sort(lexicographicOrder);\n for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n var upperIndexes = computeUpperHullIndexes(sortedPoints),\n lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n // Construct the hull polygon, removing possible duplicate endpoints.\n var skipLeft = lowerIndexes[0] === upperIndexes[0],\n skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n hull = [];\n\n // Add upper hull in right-to-l order.\n // Then add lower hull in left-to-right order.\n for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n return hull;\n}\n","export default function(polygon, point) {\n var n = polygon.length,\n p = polygon[n - 1],\n x = point[0], y = point[1],\n x0 = p[0], y0 = p[1],\n x1, y1,\n inside = false;\n\n for (var i = 0; i < n; ++i) {\n p = polygon[i], x1 = p[0], y1 = p[1];\n if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n x0 = x1, y0 = y1;\n }\n\n return inside;\n}\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n b = polygon[n - 1],\n xa,\n ya,\n xb = b[0],\n yb = b[1],\n perimeter = 0;\n\n while (++i < n) {\n xa = xb;\n ya = yb;\n b = polygon[i];\n xb = b[0];\n yb = b[1];\n xa -= xb;\n ya -= yb;\n perimeter += Math.sqrt(xa * xa + ya * ya);\n }\n\n return perimeter;\n}\n","export default function() {\n return Math.random();\n}\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomUniform(source) {\n function randomUniform(min, max) {\n min = min == null ? 0 : +min;\n max = max == null ? 1 : +max;\n if (arguments.length === 1) max = min, min = 0;\n else max -= min;\n return function() {\n return source() * max + min;\n };\n }\n\n randomUniform.source = sourceRandomUniform;\n\n return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomNormal(source) {\n function randomNormal(mu, sigma) {\n var x, r;\n mu = mu == null ? 0 : +mu;\n sigma = sigma == null ? 1 : +sigma;\n return function() {\n var y;\n\n // If available, use the second previously-generated uniform random.\n if (x != null) y = x, x = null;\n\n // Otherwise, generate a new x and y.\n else do {\n x = source() * 2 - 1;\n y = source() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n }\n\n randomNormal.source = sourceRandomNormal;\n\n return randomNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport normal from \"./normal\";\n\nexport default (function sourceRandomLogNormal(source) {\n function randomLogNormal() {\n var randomNormal = normal.source(source).apply(this, arguments);\n return function() {\n return Math.exp(randomNormal());\n };\n }\n\n randomLogNormal.source = sourceRandomLogNormal;\n\n return randomLogNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomIrwinHall(source) {\n function randomIrwinHall(n) {\n return function() {\n for (var sum = 0, i = 0; i < n; ++i) sum += source();\n return sum;\n };\n }\n\n randomIrwinHall.source = sourceRandomIrwinHall;\n\n return randomIrwinHall;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport irwinHall from \"./irwinHall\";\n\nexport default (function sourceRandomBates(source) {\n function randomBates(n) {\n var randomIrwinHall = irwinHall.source(source)(n);\n return function() {\n return randomIrwinHall() / n;\n };\n }\n\n randomBates.source = sourceRandomBates;\n\n return randomBates;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomExponential(source) {\n function randomExponential(lambda) {\n return function() {\n return -Math.log(1 - source()) / lambda;\n };\n }\n\n randomExponential.source = sourceRandomExponential;\n\n return randomExponential;\n})(defaultSource);\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport area from \"./area\";\nimport {lineRadial} from \"./lineRadial\"\n\nexport default function() {\n var a = area().curve(curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n a.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return a;\n}\n","export default function(x, y) {\n return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n","export var slice = Array.prototype.slice;\n","import {path} from \"d3-path\";\nimport {slice} from \"../array\";\nimport constant from \"../constant\";\nimport {x as pointX, y as pointY} from \"../point\";\nimport pointRadial from \"../pointRadial\";\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = pointX,\n y = pointY,\n context = null;\n\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context) context = buffer = path();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n return link(curveVertical);\n}\n\nexport function linkRadial() {\n var l = link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var peaks = series.map(peak);\n return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n return j;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","import appearance from \"./appearance\";\nimport {sum} from \"./ascending\";\n\nexport default function(series) {\n var n = series.length,\n i,\n j,\n sums = series.map(sum),\n order = appearance(series),\n top = 0,\n bottom = 0,\n tops = [],\n bottoms = [];\n\n for (i = 0; i < n; ++i) {\n j = order[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n\n return bottoms.reverse().concat(tops);\n}\n","import none from \"./none\";\n\nexport default function(series) {\n return none(series).reverse();\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function ZoomEvent(target, type, transform) {\n this.target = target;\n this.type = type;\n this.transform = transform;\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n return node.__zoom || identity;\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant\";\nimport ZoomEvent from \"./event\";\nimport {Transform, identity} from \"./transform\";\nimport noevent, {nopropagation} from \"./noevent\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultExtent() {\n var e = this, w, h;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n w = e.width.baseVal.value;\n h = e.height.baseVal.value;\n } else {\n w = e.clientWidth;\n h = e.clientHeight;\n }\n return [[0, 0], [w, h]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta() {\n return -event.deltaY * (event.deltaMode ? 120 : 1) / 500;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n gestures = [],\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled)\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n });\n };\n\n zoom.scaleTo = function(selection, k) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = centroid(e),\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n });\n };\n\n zoom.translateBy = function(selection, x, y) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n });\n };\n\n zoom.translateTo = function(selection, x, y) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p = centroid(e);\n return constrain(identity.translate(p[0], p[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n });\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, center) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args),\n e = extent.apply(that, args),\n p = center || centroid(e),\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args) {\n for (var i = 0, n = gestures.length, g; i < n; ++i) {\n if ((g = gestures[i]).that === that) {\n return g;\n }\n }\n return new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.index = -1;\n this.active = 0;\n this.extent = extent.apply(that, args);\n }\n\n Gesture.prototype = {\n start: function() {\n if (++this.active === 1) {\n this.index = gestures.push(this) - 1;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n gestures.splice(this.index, 1);\n this.index = -1;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function wheeled() {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = mouse(this);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent();\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = mouse(this),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation();\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved() {\n noevent();\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped() {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent();\n g.end();\n }\n }\n\n function dblclicked() {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = mouse(this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);\n\n noevent();\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);\n else select(this).call(zoom.transform, t1);\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n started,\n n = touches.length, i, t, p;\n\n nopropagation();\n for (i = 0; i < n; ++i) {\n t = touches[i], p = touch(this, touches, t.identifier);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true;\n else if (!g.touch1) g.touch1 = p;\n }\n\n // If this is a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (touchstarting) {\n touchstarting = clearTimeout(touchstarting);\n if (!g.touch1) {\n g.end();\n p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n return;\n }\n }\n\n if (started) {\n touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved() {\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent();\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = touch(this, touches, t.identifier);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended() {\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation();\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else g.end();\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n return zoom;\n}\n","export {version} from \"./dist/package\";\nexport * from \"d3-array\";\nexport * from \"d3-axis\";\nexport * from \"d3-brush\";\nexport * from \"d3-chord\";\nexport * from \"d3-collection\";\nexport * from \"d3-color\";\nexport * from \"d3-contour\";\nexport * from \"d3-dispatch\";\nexport * from \"d3-drag\";\nexport * from \"d3-dsv\";\nexport * from \"d3-ease\";\nexport * from \"d3-fetch\";\nexport * from \"d3-force\";\nexport * from \"d3-format\";\nexport * from \"d3-geo\";\nexport * from \"d3-hierarchy\";\nexport * from \"d3-interpolate\";\nexport * from \"d3-path\";\nexport * from \"d3-polygon\";\nexport * from \"d3-quadtree\";\nexport * from \"d3-random\";\nexport * from \"d3-scale\";\nexport * from \"d3-scale-chromatic\";\nexport * from \"d3-selection\";\nexport * from \"d3-shape\";\nexport * from \"d3-time\";\nexport * from \"d3-time-format\";\nexport * from \"d3-timer\";\nexport * from \"d3-transition\";\nexport * from \"d3-voronoi\";\nexport * from \"d3-zoom\";\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","export {\n default as timeInterval\n} from \"./interval\";\n\nexport {\n default as timeMillisecond,\n milliseconds as timeMilliseconds,\n default as utcMillisecond,\n milliseconds as utcMilliseconds\n} from \"./millisecond\";\n\nexport {\n default as timeSecond,\n seconds as timeSeconds,\n default as utcSecond,\n seconds as utcSeconds\n} from \"./second\";\n\nexport {\n default as timeMinute,\n minutes as timeMinutes\n} from \"./minute\";\n\nexport {\n default as timeHour,\n hours as timeHours\n} from \"./hour\";\n\nexport {\n default as timeDay,\n days as timeDays\n} from \"./day\";\n\nexport {\n sunday as timeWeek,\n sundays as timeWeeks,\n sunday as timeSunday,\n sundays as timeSundays,\n monday as timeMonday,\n mondays as timeMondays,\n tuesday as timeTuesday,\n tuesdays as timeTuesdays,\n wednesday as timeWednesday,\n wednesdays as timeWednesdays,\n thursday as timeThursday,\n thursdays as timeThursdays,\n friday as timeFriday,\n fridays as timeFridays,\n saturday as timeSaturday,\n saturdays as timeSaturdays\n} from \"./week\";\n\nexport {\n default as timeMonth,\n months as timeMonths\n} from \"./month\";\n\nexport {\n default as timeYear,\n years as timeYears\n} from \"./year\";\n\nexport {\n default as utcMinute,\n utcMinutes as utcMinutes\n} from \"./utcMinute\";\n\nexport {\n default as utcHour,\n utcHours as utcHours\n} from \"./utcHour\";\n\nexport {\n default as utcDay,\n utcDays as utcDays\n} from \"./utcDay\";\n\nexport {\n utcSunday as utcWeek,\n utcSundays as utcWeeks,\n utcSunday as utcSunday,\n utcSundays as utcSundays,\n utcMonday as utcMonday,\n utcMondays as utcMondays,\n utcTuesday as utcTuesday,\n utcTuesdays as utcTuesdays,\n utcWednesday as utcWednesday,\n utcWednesdays as utcWednesdays,\n utcThursday as utcThursday,\n utcThursdays as utcThursdays,\n utcFriday as utcFriday,\n utcFridays as utcFridays,\n utcSaturday as utcSaturday,\n utcSaturdays as utcSaturdays\n} from \"./utcWeek\";\n\nexport {\n default as utcMonth,\n utcMonths as utcMonths\n} from \"./utcMonth\";\n\nexport {\n default as utcYear,\n utcYears as utcYears\n} from \"./utcYear\";\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Underscore.js 1.9.1\n// http://underscorejs.org\n// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n this ||\n {};\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for their old module API. If we're in\n // the browser, add `_` as a global object.\n // (`nodeType` is checked to ensure that `module`\n // and `exports` are not HTML elements.)\n if (typeof exports != 'undefined' && !exports.nodeType) {\n if (typeof module != 'undefined' && !module.nodeType && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.9.1';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n var builtinIteratee;\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n return _.property(value);\n };\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only argCount argument.\n _.iteratee = builtinIteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n var restArguments = function(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var shallowProperty = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n var has = function(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n }\n\n var deepGet = function(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = shallowProperty('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n var createReduce = function(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n };\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (_.isFunction(path)) {\n func = path;\n } else if (_.isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return _.map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection.\n _.shuffle = function(obj) {\n return _.sample(obj, Infinity);\n };\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = _.random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n });\n\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (_.isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, Boolean);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (shallow) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n flatten(value, shallow, strict, output);\n idx = output.length;\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = restArguments(function(array, otherArrays) {\n return _.difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = restArguments(function(arrays) {\n return _.uniq(flatten(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n });\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = restArguments(_.unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of _.pairs.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions.\n var createPredicateIndexFinder = function(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n };\n\n // Returns the first index on an array-like that passes a predicate test.\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions.\n var createIndexFinder = function(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n };\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n _.chunk = function(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments.\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = restArguments(function(func, context, args) {\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n _.partial = restArguments(function(func, boundArgs) {\n var placeholder = _.partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n _.partial.placeholder = _;\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = _.bind(obj[key], obj);\n }\n });\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = _.delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n _.restArguments = restArguments;\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n var collectNonEnumProps = function(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n };\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object.\n // In contrast to _.map it returns an object.\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of _.object.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`.\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test.\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Internal pick helper function to determine if `obj` has key `key`.\n var keyInObj = function(value, key, obj) {\n return key in obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (_.isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = _.allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = _.map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n });\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq, deepEq;\n eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n };\n\n // Internal recursive comparison function for `isEqual`.\n deepEq = function(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`?\n _.isNaN = function(obj) {\n return _.isNumber(obj) && isNaN(obj);\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, path) {\n if (!_.isArray(path)) {\n return has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indexes.\n _.property = function(path) {\n if (!_.isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n };\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !_.isArray(path) ? obj[path] : deepGet(obj, path);\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '`': '&#x60;'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n _.result = function(obj, path, fallback) {\n if (!_.isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = _.isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var chainResult = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return chainResult(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define == 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}());\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export {default as color, rgb, hsl} from \"./color\";\nexport {default as lab, hcl, lch, gray} from \"./lab\";\nexport {default as cubehelix} from \"./cubehelix\";\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hue} from \"./color\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export {default as interpolate} from \"./value\";\nexport {default as interpolateArray} from \"./array\";\nexport {default as interpolateBasis} from \"./basis\";\nexport {default as interpolateBasisClosed} from \"./basisClosed\";\nexport {default as interpolateDate} from \"./date\";\nexport {default as interpolateDiscrete} from \"./discrete\";\nexport {default as interpolateHue} from \"./hue\";\nexport {default as interpolateNumber} from \"./number\";\nexport {default as interpolateObject} from \"./object\";\nexport {default as interpolateRound} from \"./round\";\nexport {default as interpolateString} from \"./string\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index\";\nexport {default as interpolateZoom} from \"./zoom\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl\";\nexport {default as interpolateLab} from \"./lab\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix\";\nexport {default as piecewise} from \"./piecewise\";\nexport {default as quantize} from \"./quantize\";\n","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n__export(require(\"./array\"));\n__export(require(\"./chain\"));\n__export(require(\"./empty\"));\n__export(require(\"./filter\"));\n__export(require(\"./find\"));\n__export(require(\"./iter\"));\n__export(require(\"./map\"));\n__export(require(\"./range\"));\n__export(require(\"./reduce\"));\n__export(require(\"./repeat\"));\n__export(require(\"./retro\"));\n__export(require(\"./sort\"));\n__export(require(\"./stride\"));\n__export(require(\"./string\"));\n__export(require(\"./take\"));\n__export(require(\"./zip\"));\n","module.exports = __WEBPACK_EXTERNAL_MODULE__10__;","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _ = __importStar(require(\"underscore\"));\nconst is_typedarray_1 = __importDefault(require(\"is-typedarray\"));\nconst typesToArray = {\n int8: Int8Array,\n int16: Int16Array,\n int32: Int32Array,\n uint8: Uint8Array,\n uint16: Uint16Array,\n uint32: Uint32Array,\n float32: Float32Array,\n float64: Float64Array\n};\nconst arrayToTypes = {\n Int8Array: 'int8',\n Int16Array: 'int16',\n Int32Array: 'int32',\n Uint8Array: 'uint8',\n Uint16Array: 'uint16',\n Uint32Array: 'uint32',\n Float32Array: 'float32',\n Float64Array: 'float64'\n};\nfunction deserialize_typed_array(data, manager) {\n const type = typesToArray[data.dtype];\n if (data == null) {\n console.log('data is null');\n }\n if (!data.value) {\n console.log('data.buffer is null');\n }\n if (!data.value.buffer) {\n console.log('data.buffer is null');\n }\n const ar = new type(data.value.buffer);\n ar.type = data.type;\n if (data.shape && data.shape.length >= 2) {\n if (data.shape.length > 2)\n throw new Error(\"only arrays with rank 1 or 2 supported\");\n const arrays = [];\n // slice the 1d typed arrays in multiple arrays and put them in a\n // regular array\n for (let i = 0; i < data.shape[0]; i++) {\n arrays.push(ar.slice(i * data.shape[1], (i + 1) * data.shape[1]));\n }\n return arrays;\n }\n else {\n return ar;\n }\n}\nfunction serialize_typed_array(ar, manager) {\n if (ar == null) {\n console.log('data is null');\n }\n if (!ar.buffer) {\n console.log('ar.buffer is null or not defined');\n }\n const dtype = arrayToTypes[ar.constructor.name];\n const type = ar.type || null;\n const wire = { dtype: dtype, value: new DataView(ar.buffer), shape: [ar.length], type: type };\n return wire;\n}\nfunction deserialize_array_or_json(data, manager) {\n if (data == null)\n return null;\n let value = null;\n if (_.isNumber(data)) { // plain number\n return data;\n }\n else if (_.isArray(data)) {\n if (data.length == 0) {\n /* no-op */\n }\n else {\n if (_.isArray(data[0])) { // 2d array\n value = _.map(data, function (data1d) { return deserialize_array_or_json(data1d, manager); });\n }\n else { // it contains a plain array most likely\n value = data;\n }\n }\n }\n else if (data.value && data.dtype) { // binary data\n value = deserialize_typed_array(data, undefined);\n }\n else {\n console.error('not sure what the data is');\n }\n return value;\n}\nfunction serialize_array_or_json(data, manager) {\n if (data == null)\n return null;\n if (_.isNumber(data)) {\n return data; // return numbers directly\n }\n else if (_.isArray(data)) {\n return data.map((ar) => serialize_array_or_json(ar, manager));\n }\n else if (is_typedarray_1.default(data)) {\n return serialize_typed_array(data, manager);\n }\n}\nexports.array_or_json = { deserialize: deserialize_array_or_json, serialize: serialize_array_or_json };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcmlhbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSw4Q0FBZ0M7QUFDaEMsa0VBQXlDO0FBRXpDLE1BQU0sWUFBWSxHQUFHO0lBQ2pCLElBQUksRUFBRSxTQUFTO0lBQ2YsS0FBSyxFQUFFLFVBQVU7SUFDakIsS0FBSyxFQUFFLFVBQVU7SUFDakIsS0FBSyxFQUFFLFVBQVU7SUFDakIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsT0FBTyxFQUFFLFlBQVk7SUFDckIsT0FBTyxFQUFFLFlBQVk7Q0FDeEIsQ0FBQTtBQUVELE1BQU0sWUFBWSxHQUFHO0lBQ2pCLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLFlBQVksRUFBRSxTQUFTO0lBQ3ZCLFlBQVksRUFBRSxTQUFTO0NBQzFCLENBQUE7QUFHRCxTQUFTLHVCQUF1QixDQUFDLElBQUksRUFBRSxPQUFPO0lBQzFDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsSUFBRyxJQUFJLElBQUksSUFBSSxFQUFFO1FBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtLQUM5QjtJQUNELElBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0tBQ3JDO0lBQ0QsSUFBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtLQUNyQztJQUNELE1BQU0s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","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar properties_1 = require(\"@phosphor/properties\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\nvar title_1 = require(\"./title\");\r\n/**\r\n * The base class of the Phosphor widget hierarchy.\r\n *\r\n * #### Notes\r\n * This class will typically be subclassed in order to create a useful\r\n * widget. However, it can be used directly to host externally created\r\n * content.\r\n */\r\nvar Widget = /** @class */ (function () {\r\n /**\r\n * Construct a new widget.\r\n *\r\n * @param options - The options for initializing the widget.\r\n */\r\n function Widget(options) {\r\n if (options === void 0) { options = {}; }\r\n this._flags = 0;\r\n this._layout = null;\r\n this._parent = null;\r\n this._disposed = new signaling_1.Signal(this);\r\n this.node = Private.createNode(options);\r\n this.addClass('p-Widget');\r\n }\r\n /**\r\n * Dispose of the widget and its descendant widgets.\r\n *\r\n * #### Notes\r\n * It is unsafe to use the widget after it has been disposed.\r\n *\r\n * All calls made to this method after the first are a no-op.\r\n */\r\n Widget.prototype.dispose = function () {\r\n // Do nothing if the widget is already disposed.\r\n if (this.isDisposed) {\r\n return;\r\n }\r\n // Set the disposed flag and emit the disposed signal.\r\n this.setFlag(Widget.Flag.IsDisposed);\r\n this._disposed.emit(undefined);\r\n // Remove or detach the widget if necessary.\r\n if (this.parent) {\r\n this.parent = null;\r\n }\r\n else if (this.isAttached) {\r\n Widget.detach(this);\r\n }\r\n // Dispose of the widget layout.\r\n if (this._layout) {\r\n this._layout.dispose();\r\n this._layout = null;\r\n }\r\n // Clear the extra data associated with the widget.\r\n signaling_1.Signal.clearData(this);\r\n messaging_1.MessageLoop.clearData(this);\r\n properties_1.AttachedProperty.clearData(this);\r\n };\r\n Object.defineProperty(Widget.prototype, \"disposed\", {\r\n /**\r\n * A signal emitted when the widget is disposed.\r\n */\r\n get: function () {\r\n return this._disposed;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Widget.prototype, \"isDisposed\", {\r\n /**\r\n * Test whether the widget has been disposed.\r\n */\r\n get: function () {\r\n return this.testFlag(Widget.Flag.IsDisposed);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Widget.prototype, \"isAttached\", {\r\n /**\r\n * Test whether the widget's node is attached to the DOM.\r\n */\r\n get: function () {\r\n return this.testFlag(Widget.Flag.IsAttached);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Widget.prototype, \"isHidden\", {\r\n /**\r\n * Test whether the widget is explicitly hidden.\r\n */\r\n get: function () {\r\n return this.testFlag(Widget.Flag.IsHidden);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Widget.prototype, \"isVisible\", {\r\n /**\r\n * Test whether the widget is visible.\r\n *\r\n * #### Notes\r\n * A widget is visible when it is attached to the DOM, is not\r\n * explicitly hidden, and has no explicitly hidden ancestors.\r\n */\r\n get: function () {\r\n return this.testFlag(Widget.Flag.IsVisible);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Widget.prototype, \"title\", {\r\n /**\r\n * The title object for the widget.\r\n *\r\n * #### Notes\r\n * The title object is used by some container widgets when displaying\r\n * the widget alongside some title, such as a tab panel or side bar.\r\n *\r\n * Since not all widgets will use the title, it is created on demand.\r\n *\r\n * The `owner` property of the title is set to this widget.\r\n */\r\n get: function () {\r\n return Private.titleProperty.get(this);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Widget.prototype, \"id\", {\r\n /**\r\n * Get the id of the widget's DOM node.\r\n */\r\n get: function () {\r\n return this.node.id;\r\n },\r\n /**\r\n * Set the id of the widget's DOM node.\r\n */\r\n set: function (value) {\r\n this.node.id = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Widget.prototype, \"dataset\", {\r\n /**\r\n * The dataset for the widget's DOM node.\r\n */\r\n get: function () {\r\n return this.node.dataset;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Widget.prototype, \"parent\", {\r\n /**\r\n * Get the parent of the widget.\r\n */\r\n get: function () {\r\n return this._parent;\r\n },\r\n /**\r\n * Set the parent of the widget.\r\n *\r\n * #### Notes\r\n * Children are typically added to a widget by using a layout, which\r\n * means user code will not normally set the parent widget directly.\r\n *\r\n * The widget will be automatically removed from its old parent.\r\n *\r\n * This is a no-op if there is no effective parent change.\r\n */\r\n set: function (value) {\r\n if (this._parent === value) {\r\n return;\r\n }\r\n if (value && this.contains(value)) {\r\n throw new Error('Invalid parent widget.');\r\n }\r\n if (this._parent && !this._parent.isDisposed) {\r\n var msg = new Widget.ChildMessage('child-removed', this);\r\n messaging_1.MessageLoop.sendMessage(this._parent, msg);\r\n }\r\n this._parent = value;\r\n if (this._parent && !this._parent.isDisposed) {\r\n var msg = new Widget.ChildMessage('child-added', this);\r\n messaging_1.MessageLoop.sendMessage(this._parent, msg);\r\n }\r\n if (!this.isDisposed) {\r\n messaging_1.MessageLoop.sendMessage(this, Widget.Msg.ParentChanged);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Widget.prototype, \"layout\", {\r\n /**\r\n * Get the layout for the widget.\r\n */\r\n get: function () {\r\n return this._layout;\r\n },\r\n /**\r\n * Set the layout for the widget.\r\n *\r\n * #### Notes\r\n * The layout is single-use only. It cannot be changed after the\r\n * first assignment.\r\n *\r\n * The layout is disposed automatically when the widget is disposed.\r\n */\r\n set: function (value) {\r\n if (this._layout === value) {\r\n return;\r\n }\r\n if (this.testFlag(Widget.Flag.DisallowLayout)) {\r\n throw new Error('Cannot set widget layout.');\r\n }\r\n if (this._layout) {\r\n throw new Error('Cannot change widget layout.');\r\n }\r\n if (value.parent) {\r\n throw new Error('Cannot change layout parent.');\r\n }\r\n this._layout = value;\r\n value.parent = this;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Create an iterator over the widget's children.\r\n *\r\n * @returns A new iterator over the children of the widget.\r\n *\r\n * #### Notes\r\n * The widget must have a populated layout in order to have children.\r\n *\r\n * If a layout is not installed, the returned iterator will be empty.\r\n */\r\n Widget.prototype.children = function () {\r\n return this._layout ? this._layout.iter() : algorithm_1.empty();\r\n };\r\n /**\r\n * Test whether a widget is a descendant of this widget.\r\n *\r\n * @param widget - The descendant widget of interest.\r\n *\r\n * @returns `true` if the widget is a descendant, `false` otherwise.\r\n */\r\n Widget.prototype.contains = function (widget) {\r\n for (var value = widget; value; value = value._parent) {\r\n if (value === this) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n /**\r\n * Test whether the widget's DOM node has the given class name.\r\n *\r\n * @param name - The class name of interest.\r\n *\r\n * @returns `true` if the node has the class, `false` otherwise.\r\n */\r\n Widget.prototype.hasClass = function (name) {\r\n return this.node.classList.contains(name);\r\n };\r\n /**\r\n * Add a class name to the widget's DOM node.\r\n *\r\n * @param name - The class name to add to the node.\r\n *\r\n * #### Notes\r\n * If the class name is already added to the node, this is a no-op.\r\n *\r\n * The class name must not contain whitespace.\r\n */\r\n Widget.prototype.addClass = function (name) {\r\n this.node.classList.add(name);\r\n };\r\n /**\r\n * Remove a class name from the widget's DOM node.\r\n *\r\n * @param name - The class name to remove from the node.\r\n *\r\n * #### Notes\r\n * If the class name is not yet added to the node, this is a no-op.\r\n *\r\n * The class name must not contain whitespace.\r\n */\r\n Widget.prototype.removeClass = function (name) {\r\n this.node.classList.remove(name);\r\n };\r\n /**\r\n * Toggle a class name on the widget's DOM node.\r\n *\r\n * @param name - The class name to toggle on the node.\r\n *\r\n * @param force - Whether to force add the class (`true`) or force\r\n * remove the class (`false`). If not provided, the presence of\r\n * the class will be toggled from its current state.\r\n *\r\n * @returns `true` if the class is now present, `false` otherwise.\r\n *\r\n * #### Notes\r\n * The class name must not contain whitespace.\r\n */\r\n Widget.prototype.toggleClass = function (name, force) {\r\n if (force === true) {\r\n this.node.classList.add(name);\r\n return true;\r\n }\r\n if (force === false) {\r\n this.node.classList.remove(name);\r\n return false;\r\n }\r\n return this.node.classList.toggle(name);\r\n };\r\n /**\r\n * Post an `'update-request'` message to the widget.\r\n *\r\n * #### Notes\r\n * This is a simple convenience method for posting the message.\r\n */\r\n Widget.prototype.update = function () {\r\n messaging_1.MessageLoop.postMessage(this, Widget.Msg.UpdateRequest);\r\n };\r\n /**\r\n * Post a `'fit-request'` message to the widget.\r\n *\r\n * #### Notes\r\n * This is a simple convenience method for posting the message.\r\n */\r\n Widget.prototype.fit = function () {\r\n messaging_1.MessageLoop.postMessage(this, Widget.Msg.FitRequest);\r\n };\r\n /**\r\n * Post an `'activate-request'` message to the widget.\r\n *\r\n * #### Notes\r\n * This is a simple convenience method for posting the message.\r\n */\r\n Widget.prototype.activate = function () {\r\n messaging_1.MessageLoop.postMessage(this, Widget.Msg.ActivateRequest);\r\n };\r\n /**\r\n * Send a `'close-request'` message to the widget.\r\n *\r\n * #### Notes\r\n * This is a simple convenience method for sending the message.\r\n */\r\n Widget.prototype.close = function () {\r\n messaging_1.MessageLoop.sendMessage(this, Widget.Msg.CloseRequest);\r\n };\r\n /**\r\n * Show the widget and make it visible to its parent widget.\r\n *\r\n * #### Notes\r\n * This causes the [[isHidden]] property to be `false`.\r\n *\r\n * If the widget is not explicitly hidden, this is a no-op.\r\n */\r\n Widget.prototype.show = function () {\r\n if (!this.testFlag(Widget.Flag.IsHidden)) {\r\n return;\r\n }\r\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\r\n messaging_1.MessageLoop.sendMessage(this, Widget.Msg.BeforeShow);\r\n }\r\n this.clearFlag(Widget.Flag.IsHidden);\r\n this.removeClass('p-mod-hidden');\r\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\r\n messaging_1.MessageLoop.sendMessage(this, Widget.Msg.AfterShow);\r\n }\r\n if (this.parent) {\r\n var msg = new Widget.ChildMessage('child-shown', this);\r\n messaging_1.MessageLoop.sendMessage(this.parent, msg);\r\n }\r\n };\r\n /**\r\n * Hide the widget and make it hidden to its parent widget.\r\n *\r\n * #### Notes\r\n * This causes the [[isHidden]] property to be `true`.\r\n *\r\n * If the widget is explicitly hidden, this is a no-op.\r\n */\r\n Widget.prototype.hide = function () {\r\n if (this.testFlag(Widget.Flag.IsHidden)) {\r\n return;\r\n }\r\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\r\n messaging_1.MessageLoop.sendMessage(this, Widget.Msg.BeforeHide);\r\n }\r\n this.setFlag(Widget.Flag.IsHidden);\r\n this.addClass('p-mod-hidden');\r\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\r\n messaging_1.MessageLoop.sendMessage(this, Widget.Msg.AfterHide);\r\n }\r\n if (this.parent) {\r\n var msg = new Widget.ChildMessage('child-hidden', this);\r\n messaging_1.MessageLoop.sendMessage(this.parent, msg);\r\n }\r\n };\r\n /**\r\n * Show or hide the widget according to a boolean value.\r\n *\r\n * @param hidden - `true` to hide the widget, or `false` to show it.\r\n *\r\n * #### Notes\r\n * This is a convenience method for `hide()` and `show()`.\r\n */\r\n Widget.prototype.setHidden = function (hidden) {\r\n if (hidden) {\r\n this.hide();\r\n }\r\n else {\r\n this.show();\r\n }\r\n };\r\n /**\r\n * Test whether the given widget flag is set.\r\n *\r\n * #### Notes\r\n * This will not typically be called directly by user code.\r\n */\r\n Widget.prototype.testFlag = function (flag) {\r\n return (this._flags & flag) !== 0;\r\n };\r\n /**\r\n * Set the given widget flag.\r\n *\r\n * #### Notes\r\n * This will not typically be called directly by user code.\r\n */\r\n Widget.prototype.setFlag = function (flag) {\r\n this._flags |= flag;\r\n };\r\n /**\r\n * Clear the given widget flag.\r\n *\r\n * #### Notes\r\n * This will not typically be called directly by user code.\r\n */\r\n Widget.prototype.clearFlag = function (flag) {\r\n this._flags &= ~flag;\r\n };\r\n /**\r\n * Process a message sent to the widget.\r\n *\r\n * @param msg - The message sent to the widget.\r\n *\r\n * #### Notes\r\n * Subclasses may reimplement this method as needed.\r\n */\r\n Widget.prototype.processMessage = function (msg) {\r\n switch (msg.type) {\r\n case 'resize':\r\n this.notifyLayout(msg);\r\n this.onResize(msg);\r\n break;\r\n case 'update-request':\r\n this.notifyLayout(msg);\r\n this.onUpdateRequest(msg);\r\n break;\r\n case 'fit-request':\r\n this.notifyLayout(msg);\r\n this.onFitRequest(msg);\r\n break;\r\n case 'before-show':\r\n this.notifyLayout(msg);\r\n this.onBeforeShow(msg);\r\n break;\r\n case 'after-show':\r\n this.setFlag(Widget.Flag.IsVisible);\r\n this.notifyLayout(msg);\r\n this.onAfterShow(msg);\r\n break;\r\n case 'before-hide':\r\n this.notifyLayout(msg);\r\n this.onBeforeHide(msg);\r\n break;\r\n case 'after-hide':\r\n this.clearFlag(Widget.Flag.IsVisible);\r\n this.notifyLayout(msg);\r\n this.onAfterHide(msg);\r\n break;\r\n case 'before-attach':\r\n this.notifyLayout(msg);\r\n this.onBeforeAttach(msg);\r\n break;\r\n case 'after-attach':\r\n if (!this.isHidden && (!this.parent || this.parent.isVisible)) {\r\n this.setFlag(Widget.Flag.IsVisible);\r\n }\r\n this.setFlag(Widget.Flag.IsAttached);\r\n this.notifyLayout(msg);\r\n this.onAfterAttach(msg);\r\n break;\r\n case 'before-detach':\r\n this.notifyLayout(msg);\r\n this.onBeforeDetach(msg);\r\n break;\r\n case 'after-detach':\r\n this.clearFlag(Widget.Flag.IsVisible);\r\n this.clearFlag(Widget.Flag.IsAttached);\r\n this.notifyLayout(msg);\r\n this.onAfterDetach(msg);\r\n break;\r\n case 'activate-request':\r\n this.notifyLayout(msg);\r\n this.onActivateRequest(msg);\r\n break;\r\n case 'close-request':\r\n this.notifyLayout(msg);\r\n this.onCloseRequest(msg);\r\n break;\r\n case 'child-added':\r\n this.notifyLayout(msg);\r\n this.onChildAdded(msg);\r\n break;\r\n case 'child-removed':\r\n this.notifyLayout(msg);\r\n this.onChildRemoved(msg);\r\n break;\r\n default:\r\n this.notifyLayout(msg);\r\n break;\r\n }\r\n };\r\n /**\r\n * Invoke the message processing routine of the widget's layout.\r\n *\r\n * @param msg - The message to dispatch to the layout.\r\n *\r\n * #### Notes\r\n * This is a no-op if the widget does not have a layout.\r\n *\r\n * This will not typically be called directly by user code.\r\n */\r\n Widget.prototype.notifyLayout = function (msg) {\r\n if (this._layout) {\r\n this._layout.processParentMessage(msg);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'close-request'` message.\r\n *\r\n * #### Notes\r\n * The default implementation unparents or detaches the widget.\r\n */\r\n Widget.prototype.onCloseRequest = function (msg) {\r\n if (this.parent) {\r\n this.parent = null;\r\n }\r\n else if (this.isAttached) {\r\n Widget.detach(this);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'resize'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onResize = function (msg) { };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onUpdateRequest = function (msg) { };\r\n /**\r\n * A message handler invoked on a `'fit-request'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onFitRequest = function (msg) { };\r\n /**\r\n * A message handler invoked on an `'activate-request'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onActivateRequest = function (msg) { };\r\n /**\r\n * A message handler invoked on a `'before-show'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onBeforeShow = function (msg) { };\r\n /**\r\n * A message handler invoked on an `'after-show'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onAfterShow = function (msg) { };\r\n /**\r\n * A message handler invoked on a `'before-hide'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onBeforeHide = function (msg) { };\r\n /**\r\n * A message handler invoked on an `'after-hide'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onAfterHide = function (msg) { };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onBeforeAttach = function (msg) { };\r\n /**\r\n * A message handler invoked on an `'after-attach'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onAfterAttach = function (msg) { };\r\n /**\r\n * A message handler invoked on a `'before-detach'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onBeforeDetach = function (msg) { };\r\n /**\r\n * A message handler invoked on an `'after-detach'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onAfterDetach = function (msg) { };\r\n /**\r\n * A message handler invoked on a `'child-added'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onChildAdded = function (msg) { };\r\n /**\r\n * A message handler invoked on a `'child-removed'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Widget.prototype.onChildRemoved = function (msg) { };\r\n return Widget;\r\n}());\r\nexports.Widget = Widget;\r\n/**\r\n * The namespace for the `Widget` class statics.\r\n */\r\n(function (Widget) {\r\n /**\r\n * An enum of widget bit flags.\r\n */\r\n var Flag;\r\n (function (Flag) {\r\n /**\r\n * The widget has been disposed.\r\n */\r\n Flag[Flag[\"IsDisposed\"] = 1] = \"IsDisposed\";\r\n /**\r\n * The widget is attached to the DOM.\r\n */\r\n Flag[Flag[\"IsAttached\"] = 2] = \"IsAttached\";\r\n /**\r\n * The widget is hidden.\r\n */\r\n Flag[Flag[\"IsHidden\"] = 4] = \"IsHidden\";\r\n /**\r\n * The widget is visible.\r\n */\r\n Flag[Flag[\"IsVisible\"] = 8] = \"IsVisible\";\r\n /**\r\n * A layout cannot be set on the widget.\r\n */\r\n Flag[Flag[\"DisallowLayout\"] = 16] = \"DisallowLayout\";\r\n })(Flag = Widget.Flag || (Widget.Flag = {}));\r\n /**\r\n * A collection of stateless messages related to widgets.\r\n */\r\n var Msg;\r\n (function (Msg) {\r\n /**\r\n * A singleton `'before-show'` message.\r\n *\r\n * #### Notes\r\n * This message is sent to a widget before it becomes visible.\r\n *\r\n * This message is **not** sent when the widget is being attached.\r\n */\r\n Msg.BeforeShow = new messaging_1.Message('before-show');\r\n /**\r\n * A singleton `'after-show'` message.\r\n *\r\n * #### Notes\r\n * This message is sent to a widget after it becomes visible.\r\n *\r\n * This message is **not** sent when the widget is being attached.\r\n */\r\n Msg.AfterShow = new messaging_1.Message('after-show');\r\n /**\r\n * A singleton `'before-hide'` message.\r\n *\r\n * #### Notes\r\n * This message is sent to a widget before it becomes not-visible.\r\n *\r\n * This message is **not** sent when the widget is being detached.\r\n */\r\n Msg.BeforeHide = new messaging_1.Message('before-hide');\r\n /**\r\n * A singleton `'after-hide'` message.\r\n *\r\n * #### Notes\r\n * This message is sent to a widget after it becomes not-visible.\r\n *\r\n * This message is **not** sent when the widget is being detached.\r\n */\r\n Msg.AfterHide = new messaging_1.Message('after-hide');\r\n /**\r\n * A singleton `'before-attach'` message.\r\n *\r\n * #### Notes\r\n * This message is sent to a widget before it is attached.\r\n */\r\n Msg.BeforeAttach = new messaging_1.Message('before-attach');\r\n /**\r\n * A singleton `'after-attach'` message.\r\n *\r\n * #### Notes\r\n * This message is sent to a widget after it is attached.\r\n */\r\n Msg.AfterAttach = new messaging_1.Message('after-attach');\r\n /**\r\n * A singleton `'before-detach'` message.\r\n *\r\n * #### Notes\r\n * This message is sent to a widget before it is detached.\r\n */\r\n Msg.BeforeDetach = new messaging_1.Message('before-detach');\r\n /**\r\n * A singleton `'after-detach'` message.\r\n *\r\n * #### Notes\r\n * This message is sent to a widget after it is detached.\r\n */\r\n Msg.AfterDetach = new messaging_1.Message('after-detach');\r\n /**\r\n * A singleton `'parent-changed'` message.\r\n *\r\n * #### Notes\r\n * This message is sent to a widget when its parent has changed.\r\n */\r\n Msg.ParentChanged = new messaging_1.Message('parent-changed');\r\n /**\r\n * A singleton conflatable `'update-request'` message.\r\n *\r\n * #### Notes\r\n * This message can be dispatched to supporting widgets in order to\r\n * update their content based on the current widget state. Not all\r\n * widgets will respond to messages of this type.\r\n *\r\n * For widgets with a layout, this message will inform the layout to\r\n * update the position and size of its child widgets.\r\n */\r\n Msg.UpdateRequest = new messaging_1.ConflatableMessage('update-request');\r\n /**\r\n * A singleton conflatable `'fit-request'` message.\r\n *\r\n * #### Notes\r\n * For widgets with a layout, this message will inform the layout to\r\n * recalculate its size constraints to fit the space requirements of\r\n * its child widgets, and to update their position and size. Not all\r\n * layouts will respond to messages of this type.\r\n */\r\n Msg.FitRequest = new messaging_1.ConflatableMessage('fit-request');\r\n /**\r\n * A singleton conflatable `'activate-request'` message.\r\n *\r\n * #### Notes\r\n * This message should be dispatched to a widget when it should\r\n * perform the actions necessary to activate the widget, which\r\n * may include focusing its node or descendant node.\r\n */\r\n Msg.ActivateRequest = new messaging_1.ConflatableMessage('activate-request');\r\n /**\r\n * A singleton conflatable `'close-request'` message.\r\n *\r\n * #### Notes\r\n * This message should be dispatched to a widget when it should close\r\n * and remove itself from the widget hierarchy.\r\n */\r\n Msg.CloseRequest = new messaging_1.ConflatableMessage('close-request');\r\n })(Msg = Widget.Msg || (Widget.Msg = {}));\r\n /**\r\n * A message class for child related messages.\r\n */\r\n var ChildMessage = /** @class */ (function (_super) {\r\n __extends(ChildMessage, _super);\r\n /**\r\n * Construct a new child message.\r\n *\r\n * @param type - The message type.\r\n *\r\n * @param child - The child widget for the message.\r\n */\r\n function ChildMessage(type, child) {\r\n var _this = _super.call(this, type) || this;\r\n _this.child = child;\r\n return _this;\r\n }\r\n return ChildMessage;\r\n }(messaging_1.Message));\r\n Widget.ChildMessage = ChildMessage;\r\n /**\r\n * A message class for `'resize'` messages.\r\n */\r\n var ResizeMessage = /** @class */ (function (_super) {\r\n __extends(ResizeMessage, _super);\r\n /**\r\n * Construct a new resize message.\r\n *\r\n * @param width - The **offset width** of the widget, or `-1` if\r\n * the width is not known.\r\n *\r\n * @param height - The **offset height** of the widget, or `-1` if\r\n * the height is not known.\r\n */\r\n function ResizeMessage(width, height) {\r\n var _this = _super.call(this, 'resize') || this;\r\n _this.width = width;\r\n _this.height = height;\r\n return _this;\r\n }\r\n return ResizeMessage;\r\n }(messaging_1.Message));\r\n Widget.ResizeMessage = ResizeMessage;\r\n /**\r\n * The namespace for the `ResizeMessage` class statics.\r\n */\r\n (function (ResizeMessage) {\r\n /**\r\n * A singleton `'resize'` message with an unknown size.\r\n */\r\n ResizeMessage.UnknownSize = new ResizeMessage(-1, -1);\r\n })(ResizeMessage = Widget.ResizeMessage || (Widget.ResizeMessage = {}));\r\n /**\r\n * Attach a widget to a host DOM node.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param host - The DOM node to use as the widget's host.\r\n *\r\n * @param ref - The child of `host` to use as the reference element.\r\n * If this is provided, the widget will be inserted before this\r\n * node in the host. The default is `null`, which will cause the\r\n * widget to be added as the last child of the host.\r\n *\r\n * #### Notes\r\n * This will throw an error if the widget is not a root widget, if\r\n * the widget is already attached, or if the host is not attached\r\n * to the DOM.\r\n */\r\n function attach(widget, host, ref) {\r\n if (ref === void 0) { ref = null; }\r\n if (widget.parent) {\r\n throw new Error('Cannot attach a child widget.');\r\n }\r\n if (widget.isAttached || document.body.contains(widget.node)) {\r\n throw new Error('Widget is already attached.');\r\n }\r\n if (!document.body.contains(host)) {\r\n throw new Error('Host is not attached.');\r\n }\r\n messaging_1.MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\r\n host.insertBefore(widget.node, ref);\r\n messaging_1.MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\r\n }\r\n Widget.attach = attach;\r\n /**\r\n * Detach the widget from its host DOM node.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * #### Notes\r\n * This will throw an error if the widget is not a root widget,\r\n * or if the widget is not attached to the DOM.\r\n */\r\n function detach(widget) {\r\n if (widget.parent) {\r\n throw new Error('Cannot detach a child widget.');\r\n }\r\n if (!widget.isAttached || !document.body.contains(widget.node)) {\r\n throw new Error('Widget is not attached.');\r\n }\r\n messaging_1.MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\r\n widget.node.parentNode.removeChild(widget.node);\r\n messaging_1.MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\r\n }\r\n Widget.detach = detach;\r\n})(Widget = exports.Widget || (exports.Widget = {}));\r\nexports.Widget = Widget;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * An attached property for the widget title object.\r\n */\r\n Private.titleProperty = new properties_1.AttachedProperty({\r\n name: 'title',\r\n create: function (owner) { return new title_1.Title({ owner: owner }); },\r\n });\r\n /**\r\n * Create a DOM node for the given widget options.\r\n */\r\n function createNode(options) {\r\n return options.node || document.createElement('div');\r\n }\r\n Private.createNode = createNode;\r\n})(Private || (Private = {}));\r\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar algorithm_1 = require(\"@phosphor/algorithm\");\nvar collections_1 = require(\"@phosphor/collections\");\n/**\n * A message which can be delivered to a message handler.\n *\n * #### Notes\n * This class may be subclassed to create complex message types.\n */\nvar Message = /** @class */ (function () {\n /**\n * Construct a new message.\n *\n * @param type - The type of the message.\n */\n function Message(type) {\n this.type = type;\n }\n Object.defineProperty(Message.prototype, \"isConflatable\", {\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * If a conflatable message is posted to a handler while another\n * conflatable message of the same `type` has already been posted\n * to the handler, the `conflate()` method of the existing message\n * will be invoked. If that method returns `true`, the new message\n * will not be enqueued. This allows messages to be compressed, so\n * that only a single instance of the message type is processed per\n * cycle, no matter how many times messages of that type are posted.\n *\n * Custom message types may reimplement this property.\n *\n * The default implementation is always `false`.\n */\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Conflate this message with another message of the same `type`.\n *\n * @param other - A conflatable message of the same `type`.\n *\n * @returns `true` if the message was successfully conflated, or\n * `false` otherwise.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * This method is called automatically by the message loop when the\n * given message is posted to the handler paired with this message.\n * This message will already be enqueued and conflatable, and the\n * given message will have the same `type` and also be conflatable.\n *\n * This method should merge the state of the other message into this\n * message as needed so that when this message is finally delivered\n * to the handler, it receives the most up-to-date information.\n *\n * If this method returns `true`, it signals that the other message\n * was successfully conflated and that message will not be enqueued.\n *\n * If this method returns `false`, the other message will be enqueued\n * for normal delivery.\n *\n * Custom message types may reimplement this method.\n *\n * The default implementation always returns `false`.\n */\n Message.prototype.conflate = function (other) {\n return false;\n };\n return Message;\n}());\nexports.Message = Message;\n/**\n * A convenience message class which conflates automatically.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most user code will not\n * make use of this class.\n *\n * This message class is useful for creating message instances which\n * should be conflated, but which have no state other than `type`.\n *\n * If conflation of stateful messages is required, a custom `Message`\n * subclass should be created.\n */\nvar ConflatableMessage = /** @class */ (function (_super) {\n __extends(ConflatableMessage, _super);\n function ConflatableMessage() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ConflatableMessage.prototype, \"isConflatable\", {\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * This property is always `true`.\n */\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Conflate this message with another message of the same `type`.\n *\n * #### Notes\n * This method always returns `true`.\n */\n ConflatableMessage.prototype.conflate = function (other) {\n return true;\n };\n return ConflatableMessage;\n}(Message));\nexports.ConflatableMessage = ConflatableMessage;\n/**\n * The namespace for the global singleton message loop.\n */\nvar MessageLoop;\n(function (MessageLoop) {\n /**\n * Send a message to a message handler to process immediately.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to deliver to the handler.\n *\n * #### Notes\n * The message will first be sent through any installed message hooks\n * for the handler. If the message passes all hooks, it will then be\n * delivered to the `processMessage` method of the handler.\n *\n * The message will not be conflated with pending posted messages.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function sendMessage(handler, msg) {\n // Lookup the message hooks for the handler.\n var hooks = messageHooks.get(handler);\n // Handle the common case of no installed hooks.\n if (!hooks || hooks.length === 0) {\n invokeHandler(handler, msg);\n return;\n }\n // Invoke the message hooks starting with the newest first.\n var passed = algorithm_1.every(algorithm_1.retro(hooks), function (hook) {\n return hook ? invokeHook(hook, handler, msg) : true;\n });\n // Invoke the handler if the message passes all hooks.\n if (passed) {\n invokeHandler(handler, msg);\n }\n }\n MessageLoop.sendMessage = sendMessage;\n /**\n * Post a message to a message handler to process in the future.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to post to the handler.\n *\n * #### Notes\n * The message will be conflated with the pending posted messages for\n * the handler, if possible. If the message is not conflated, it will\n * be queued for normal delivery on the next cycle of the event loop.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function postMessage(handler, msg) {\n // Handle the common case of a non-conflatable message.\n if (!msg.isConflatable) {\n enqueueMessage(handler, msg);\n return;\n }\n // Conflate the message with an existing message if possible.\n var conflated = algorithm_1.some(messageQueue, function (posted) {\n if (posted.handler !== handler) {\n return false;\n }\n if (!posted.msg) {\n return false;\n }\n if (posted.msg.type !== msg.type) {\n return false;\n }\n if (!posted.msg.isConflatable) {\n return false;\n }\n return posted.msg.conflate(msg);\n });\n // Enqueue the message if it was not conflated.\n if (!conflated) {\n enqueueMessage(handler, msg);\n }\n }\n MessageLoop.postMessage = postMessage;\n /**\n * Install a message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to install.\n *\n * #### Notes\n * A message hook is invoked before a message is delivered to the\n * handler. If the hook returns `false`, no other hooks will be\n * invoked and the message will not be delivered to the handler.\n *\n * The most recently installed message hook is executed first.\n *\n * If the hook is already installed, this is a no-op.\n */\n function installMessageHook(handler, hook) {\n // Lookup the hooks for the handler.\n var hooks = messageHooks.get(handler);\n // Bail early if the hook is already installed.\n if (hooks && hooks.indexOf(hook) !== -1) {\n return;\n }\n // Add the hook to the end, so it will be the first to execute.\n if (!hooks) {\n messageHooks.set(handler, [hook]);\n }\n else {\n hooks.push(hook);\n }\n }\n MessageLoop.installMessageHook = installMessageHook;\n /**\n * Remove an installed message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to remove.\n *\n * #### Notes\n * It is safe to call this function while the hook is executing.\n *\n * If the hook is not installed, this is a no-op.\n */\n function removeMessageHook(handler, hook) {\n // Lookup the hooks for the handler.\n var hooks = messageHooks.get(handler);\n // Bail early if the hooks do not exist.\n if (!hooks) {\n return;\n }\n // Lookup the index of the hook and bail if not found.\n var i = hooks.indexOf(hook);\n if (i === -1) {\n return;\n }\n // Clear the hook and schedule a cleanup of the array.\n hooks[i] = null;\n scheduleCleanup(hooks);\n }\n MessageLoop.removeMessageHook = removeMessageHook;\n /**\n * Clear all message data associated with a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * #### Notes\n * This will clear all posted messages and hooks for the handler.\n */\n function clearData(handler) {\n // Lookup the hooks for the handler.\n var hooks = messageHooks.get(handler);\n // Clear all messsage hooks for the handler.\n if (hooks && hooks.length > 0) {\n algorithm_1.ArrayExt.fill(hooks, null);\n scheduleCleanup(hooks);\n }\n // Clear all posted messages for the handler.\n algorithm_1.each(messageQueue, function (posted) {\n if (posted.handler === handler) {\n posted.handler = null;\n posted.msg = null;\n }\n });\n }\n MessageLoop.clearData = clearData;\n /**\n * Process the pending posted messages in the queue immediately.\n *\n * #### Notes\n * This function is useful when posted messages must be processed\n * immediately, instead of on the next animation frame.\n *\n * This function should normally not be needed, but it may be\n * required to work around certain browser idiosyncrasies.\n *\n * Recursing into this function is a no-op.\n */\n function flush() {\n // Bail if recursion is detected or if there is no pending task.\n if (flushGuard || loopTaskID === 0) {\n return;\n }\n // Unschedule the pending loop task.\n unschedule(loopTaskID);\n // Run the message loop within the recursion guard.\n flushGuard = true;\n runMessageLoop();\n flushGuard = false;\n }\n MessageLoop.flush = flush;\n /**\n * Get the message loop exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return exceptionHandler;\n }\n MessageLoop.getExceptionHandler = getExceptionHandler;\n /**\n * Set the message loop exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a message handler or a\n * message hook throws an exception.\n */\n function setExceptionHandler(handler) {\n var old = exceptionHandler;\n exceptionHandler = handler;\n return old;\n }\n MessageLoop.setExceptionHandler = setExceptionHandler;\n /**\n * The queue of posted message pairs.\n */\n var messageQueue = new collections_1.LinkedList();\n /**\n * A mapping of handler to array of installed message hooks.\n */\n var messageHooks = new WeakMap();\n /**\n * A set of message hook arrays which are pending cleanup.\n */\n var dirtySet = new Set();\n /**\n * The message loop exception handler.\n */\n var exceptionHandler = function (err) {\n console.error(err);\n };\n /**\n * The id of the pending loop task animation frame.\n */\n var loopTaskID = 0;\n /**\n * A guard flag to prevent flush recursion.\n */\n var flushGuard = false;\n /**\n * A function to schedule an event loop callback.\n */\n var schedule = (function () {\n var ok = typeof requestAnimationFrame === 'function';\n return ok ? requestAnimationFrame : setImmediate;\n })();\n /**\n * A function to unschedule an event loop callback.\n */\n var unschedule = (function () {\n var ok = typeof cancelAnimationFrame === 'function';\n return ok ? cancelAnimationFrame : clearImmediate;\n })();\n /**\n * Invoke a message hook with the specified handler and message.\n *\n * Returns the result of the hook, or `true` if the hook throws.\n *\n * Exceptions in the hook will be caught and logged.\n */\n function invokeHook(hook, handler, msg) {\n var result = true;\n try {\n if (typeof hook === 'function') {\n result = hook(handler, msg);\n }\n else {\n result = hook.messageHook(handler, msg);\n }\n }\n catch (err) {\n exceptionHandler(err);\n }\n return result;\n }\n /**\n * Invoke a message handler with the specified message.\n *\n * Exceptions in the handler will be caught and logged.\n */\n function invokeHandler(handler, msg) {\n try {\n handler.processMessage(msg);\n }\n catch (err) {\n exceptionHandler(err);\n }\n }\n /**\n * Add a message to the end of the message queue.\n *\n * This will automatically schedule a run of the message loop.\n */\n function enqueueMessage(handler, msg) {\n // Add the posted message to the queue.\n messageQueue.addLast({ handler: handler, msg: msg });\n // Bail if a loop task is already pending.\n if (loopTaskID !== 0) {\n return;\n }\n // Schedule a run of the message loop.\n loopTaskID = schedule(runMessageLoop);\n }\n /**\n * Run an iteration of the message loop.\n *\n * This will process all pending messages in the queue. If a message\n * is added to the queue while the message loop is running, it will\n * be processed on the next cycle of the loop.\n */\n function runMessageLoop() {\n // Clear the task ID so the next loop can be scheduled.\n loopTaskID = 0;\n // If the message queue is empty, there is nothing else to do.\n if (messageQueue.isEmpty) {\n return;\n }\n // Add a sentinel value to the end of the queue. The queue will\n // only be processed up to the sentinel. Messages posted during\n // this cycle will execute on the next cycle.\n var sentinel = { handler: null, msg: null };\n messageQueue.addLast(sentinel);\n // Enter the message loop.\n while (true) {\n // Remove the first posted message in the queue.\n var posted = messageQueue.removeFirst();\n // If the value is the sentinel, exit the loop.\n if (posted === sentinel) {\n return;\n }\n // Dispatch the message if it has not been cleared.\n if (posted.handler && posted.msg) {\n sendMessage(posted.handler, posted.msg);\n }\n }\n }\n /**\n * Schedule a cleanup of a message hooks array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any `null` hook will\n * be removed from the array.\n */\n function scheduleCleanup(hooks) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(hooks);\n }\n /**\n * Cleanup the message hook arrays in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupHooks);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty hooks in a message hooks array.\n *\n * This will remove any `null` hook from the array.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupHooks(hooks) {\n algorithm_1.ArrayExt.removeAllWhere(hooks, isNull);\n }\n /**\n * Test whether a value is `null`.\n */\n function isNull(value) {\n return value === null;\n }\n})(MessageLoop = exports.MessageLoop || (exports.MessageLoop = {}));\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n__export(require(\"./element\"));\n__export(require(\"./platform\"));\n__export(require(\"./selector\"));\n","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-scale\"));\nconst is_typedarray_1 = __importDefault(require(\"is-typedarray\"));\nconst _ = __importStar(require(\"underscore\"));\n// the following is a regex to match all valid time formats that can be\n// generated with d3 as of 2nd March 2015. If new formats are added to d3\n// those new formats need to be added to the regex\nconst time_format_regex = new RegExp(\"^(((((\\\\*)|(/*)|(-*))(\\\\s*)%([aAbBdeHIjmMLpSUwWyYZ]{1}))+)|((\\\\s*)%([cxX]{1})))$\");\nfunction deepCopy(obj) {\n // This makes a deep copy of JSON-parsable objects\n // (no cycling or recombining)\n // Backbone model attributes must be JSON parsable. Hence there is\n // no need for a fancier logic, and it is surprisingly efficient.\n if (is_typedarray_1.default(obj))\n return obj.slice();\n else if (_.isArray(obj)) {\n return obj.map(x => deepCopy(x));\n }\n else if (_.isNumber(obj) || _.isString(obj)) {\n return obj;\n }\n else if (_.isDate(obj)) {\n return new Date(obj.getTime());\n }\n else {\n const newobj = {};\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n newobj[key] = deepCopy(obj[key]);\n }\n }\n return newobj;\n }\n}\nexports.deepCopy = deepCopy;\nfunction convert_dates(value) {\n // check if the array of value contains Date objects, if so\n // dates are serialized using the timestamp only, some parts of the code\n // use the Data objects, detect that and convert.\n // also, we set the .type property of TypedArray, to keep track of it being a\n // date array\n if (is_typedarray_1.default(value))\n return value;\n const convert_to_date = function (x) {\n const ar = new Float64Array(x.map(Number));\n ar.type = 'date';\n return ar;\n };\n if (value[0] instanceof Array && value[0][0] instanceof Date)\n value = value.map(convert_to_date);\n else if (value[0] instanceof Date)\n value = convert_to_date(value);\n return value;\n}\nexports.convert_dates = convert_dates;\nfunction getCustomRange(array) {\n const first = array[0];\n const end = array[array.length - 1];\n let pivot;\n if (array[0] > array[1]) {\n pivot = d3.min(array);\n }\n else {\n pivot = d3.max(array);\n }\n return [d3.scaleLinear().range([first, pivot]), d3.scaleLinear().range([pivot, end])];\n}\nexports.getCustomRange = getCustomRange;\nfunction is_valid_time_format(format) {\n return time_format_regex.test(format);\n}\nexports.is_valid_time_format = is_valid_time_format;\nfunction is_array(x) {\n return (x instanceof Array) || is_typedarray_1.default(x);\n}\nexports.is_array = is_array;\nfunction getDate(elem) {\n if (elem === undefined || elem === null) {\n return null;\n }\n return new Date(elem);\n}\nexports.getDate = getDate;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6Qix1RUFBdUU7QUFDdkUsa0VBQXlDO0FBQ3pDLDhDQUFnQztBQUVoQyx1RUFBdUU7QUFDdkUseUVBQXlFO0FBQ3pFLGtEQUFrRDtBQUNsRCxNQUFNLGlCQUFpQixHQUFHLElBQUksTUFBTSxDQUFDLGtGQUFrRixDQUFDLENBQUM7QUFFekgsU0FBZ0IsUUFBUSxDQUFDLEdBQUc7SUFDeEIsa0RBQWtEO0lBQ2xELDhCQUE4QjtJQUM5QixrRUFBa0U7SUFDbEUsaUVBQWlFO0lBQ2pFLElBQUcsdUJBQVksQ0FBQyxHQUFHLENBQUM7UUFDaEIsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUE7U0FDakIsSUFBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ25DO1NBQU0sSUFBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDMUMsT0FBTyxHQUFHLENBQUM7S0FDZDtTQUFNLElBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNyQixPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ2xDO1NBQU07UUFDSCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFDakIsS0FBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7WUFDaEIsSUFBRyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO2FBQ25DO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUNMLENBQUM7QUF0QkQsNEJBc0JDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLEtBQUs7SUFDL0IsMkRBQTJEO0lBQzNELHdFQUF3RTtJQUN4RSxpREFBaUQ7SUFDakQsNkVBQTZFO0lBQzdFLGFBQWE7SUFDYixJQUFHLHVCQUFZLENBQUMsS0FBSyxDQUFDO1FBQ2xCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLE1BQU0sZUFBZSxHQUFHLFVBQVMsQ0FBQztRQUM5QixNQUFNLEVBQUUsR0FBUSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEQsRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDakIsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDLENBQUE7SUFDRCxJQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUk7UUFDdkQsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDbEMsSUFBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSTtRQUM1QixLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFsQkQsc0NBa0JDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLEtBQUs7SUFDaEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLElBQUksS0FBSyxDQUFDO0lBQ1YsSUFBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3BCLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3pCO1NBQU07UUFDSCxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN6QjtJQUNELE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsQ0FBQztBQVZELHdDQVVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsTUFBTTtJQUN2QyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRkQsb0RBRUM7QUFFRCxTQUFnQixRQUFRLENBQUMsQ0FBQztJQUN0QixPQUFPLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxJQUFJLHVCQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbEQsQ0FBQztBQUZELDRCQUVDO0FBRUQsU0FDUyxPQUFPLENBQUMsSUFBd0M7SUFDckQsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7UUFDckMsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUVELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQVBELDBCQU9DIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst version_1 = require(\"./version\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass MarkModel extends widgets.WidgetModel {\n defaults() {\n return Object.assign({}, widgets.WidgetModel.prototype.defaults(), { _model_name: \"MarkModel\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, scales: {}, scales_metadata: {}, preserve_domain: {}, display_legend: false, labels: [], apply_clip: true, visible: true, selected_style: {}, unselected_style: {}, selected: null, enable_hover: true, tooltip: null, tooltip_style: { opacity: 0.9 }, interactions: { hover: \"tooltip\" }, tooltip_location: \"mouse\" });\n }\n // These two attributes are the pixel values which should be appended\n // to the area of the plot to make sure that the entire mark is visible\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on(\"change:scales\", this.update_scales, this);\n this.once(\"destroy\", this.handle_destroy, this);\n // `this.dirty` is set to `true` before starting computations that\n // might lead the state of the model to be temporarily inconsistent.\n // certain functions of views on that model might check the value\n // of `this.dirty` before rendering\n this.dirty = false;\n this.display_el_classes = [\"mark\"]; //classes on the element which\n //trigger the tooltip to be displayed when they are hovered over\n this.update_scales();\n }\n update_data() {\n // Update_data is typically overloaded in each mark\n // it triggers the \"data_updated\" event\n this.update_domains();\n this.trigger(\"data_updated\");\n }\n update_domains() {\n // update_domains is typically overloaded in each mark to update\n // the domains related to its scales\n }\n update_scales() {\n this.unregister_all_scales(this.previous(\"scales\"));\n this.trigger(\"scales_updated\");\n this.update_domains();\n }\n unregister_all_scales(scales) {\n // disassociates the mark with the scale\n this.dirty = true;\n for (let key in scales) {\n scales[key].del_domain([], this.model_id + \"_\" + key);\n }\n this.dirty = false;\n //TODO: Check if the views are being removed\n }\n handle_destroy() {\n this.unregister_all_scales(this.get(\"scales\"));\n }\n get_key_for_dimension(dimension) {\n const scales_metadata = this.get(\"scales_metadata\");\n for (let scale in scales_metadata) {\n if (scales_metadata[scale].dimension === dimension) {\n return scale;\n }\n }\n return null;\n }\n get_key_for_orientation(orientation) {\n const scales_metadata = this.get(\"scales_metadata\");\n for (let scale in scales_metadata) {\n if (scales_metadata[scale].orientation === orientation) {\n return scale;\n }\n }\n return null;\n }\n // TODO make this abstract\n get_data_dict(data, index) {\n return data;\n }\n}\nMarkModel.serializers = Object.assign({}, widgets.WidgetModel.serializers, { scales: { deserialize: widgets.unpack_models }, tooltip: { deserialize: widgets.unpack_models }, selected: serialize.array_or_json });\nexports.MarkModel = MarkModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFya01vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01hcmtNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsK0RBQWlEO0FBQ2pELHVDQUF5QztBQUN6Qyx1REFBeUM7QUFFekMsTUFBYSxTQUFVLFNBQVEsT0FBTyxDQUFDLFdBQVc7SUFFOUMsUUFBUTtRQUNKLHlCQUFXLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUMvQyxXQUFXLEVBQUUsV0FBVyxFQUN4QixhQUFhLEVBQUUsUUFBUSxFQUN2QixZQUFZLEVBQUUsUUFBUSxFQUN0QixxQkFBcUIsRUFBRSxzQkFBWSxFQUNuQyxvQkFBb0IsRUFBRSxzQkFBWSxFQUVsQyxNQUFNLEVBQUUsRUFBRSxFQUNWLGVBQWUsRUFBRSxFQUFFLEVBQ25CLGVBQWUsRUFBRSxFQUFFLEVBQ25CLGNBQWMsRUFBRSxLQUFLLEVBQ3JCLE1BQU0sRUFBRSxFQUFFLEVBQ1YsVUFBVSxFQUFFLElBQUksRUFDaEIsT0FBTyxFQUFFLElBQUksRUFDYixjQUFjLEVBQUUsRUFBRSxFQUNsQixnQkFBZ0IsRUFBRSxFQUFFLEVBQ3BCLFFBQVEsRUFBRSxJQUFJLEVBQ2QsWUFBWSxFQUFFLElBQUksRUFDbEIsT0FBTyxFQUFFLElBQUksRUFDYixhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQy9CLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFDbEMsZ0JBQWdCLEVBQUUsT0FBTyxJQUMzQjtJQUNOLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsdUVBQXVFO0lBQ3ZFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTztRQUMxQixLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsa0VBQWtFO1FBQ2xFLG9FQUFvRTtRQUNwRSxpRUFBaUU7UUFDakUsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsOEJBQThCO1FBQ2xFLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDUCxtREFBbUQ7UUFDbkQsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjO1FBQ1YsZ0VBQWdFO1FBQ2hFLG9DQUFvQztJQUN4QyxDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBTTtRQUN4Qix3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUU7WUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDekQ7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQiw0Q0FBNEM7SUFDaEQsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUFTO1FBQzNCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwRCxLQUFLLElBQUksS0FBSyxJQUFJLGVBQWUsRUFBRTtZQUMvQixJQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO2dCQUMvQyxPQUFPLEtBQUssQ0FBQzthQUNoQjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELHVCQUF1QixDQUFDLFdBQVc7UUFDL0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BELEtBQUssSUFBSSxLQUFLLElBQUksZUFBZSxFQUFFO1lBQy9CLElBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUU7Z0JBQ25ELE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsMEJBQTBCO0lBQzFCLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztBQUVNLHFCQUFXLHFCQUNYLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUNsQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUM5QyxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUMvQyxRQUFRLEVBQUUsU0FBUyxDQUFDLGFBQWEsSUFDbkM7QUExR04sOEJBZ0hDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\nconst messaging_1 = require(\"@phosphor/messaging\");\nconst widgets_1 = require(\"@phosphor/widgets\");\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-selection\"), require(\"d3-selection-multi\"));\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst _ = __importStar(require(\"underscore\"));\n// Check that value is defined and not null\nfunction is_defined(value) {\n return value !== null && value !== undefined;\n}\n;\nclass Mark extends widgets.WidgetView {\n initialize() {\n this.setElement(document.createElementNS(d3.namespaces.svg, \"g\"));\n this.d3el = d3.select(this.el);\n super.initialize.apply(this, arguments);\n }\n render() {\n this.x_padding = 0;\n this.y_padding = 0;\n this.parent = this.options.parent;\n this.uuid = widgets.uuid();\n const scale_creation_promise = this.set_scale_views();\n this.listenTo(this.model, \"scales_updated\", () => {\n this.set_scale_views().then(_.bind(this.draw, this));\n });\n this.colors = this.model.get(\"colors\");\n if (this.options.clip_id && this.model.get(\"apply_clip\")) {\n this.d3el.attr(\"clip-path\", \"url(#\" + this.options.clip_id + \")\");\n }\n this.tooltip_div = d3.select(document.createElement(\"div\"))\n .attr(\"class\", \"mark_tooltip\")\n .attr(\"id\", \"tooltip_\" + this.uuid)\n .style(\"display\", \"none\")\n .style(\"opacity\", 0);\n this.bisect = d3.bisector(function (d) { return d; }).left;\n this.d3el.style(\"display\", (this.model.get(\"visible\") ? \"inline\" : \"none\"));\n this.display_el_classes = [];\n this.event_metadata = {\n \"mouse_over\": {\n \"msg_name\": \"hover\",\n \"lookup_data\": true,\n \"hit_test\": true,\n },\n \"legend_clicked\": {\n \"msg_name\": \"legend_click\",\n \"hit_test\": true,\n },\n \"element_clicked\": {\n \"msg_name\": \"element_click\",\n \"lookup_data\": true,\n \"hit_test\": true,\n },\n \"parent_clicked\": {\n \"msg_name\": \"background_click\",\n \"hit_test\": false,\n },\n \"legend_mouse_over\": {\n \"msg_name\": \"legend_hover\",\n \"hit_test\": true\n },\n };\n return scale_creation_promise;\n }\n set_scale_views() {\n // first, if this.scales was already defined, unregister from the\n // old ones.\n for (var key in this.scales) {\n this.stopListening(this.scales[key]);\n }\n const scale_models = this.model.get(\"scales\");\n const that = this;\n const scale_promises = {};\n _.each(scale_models, function (model, key) {\n scale_promises[key] = that.create_child_view(model);\n });\n return widgets.resolvePromisesDict(scale_promises).then(function (scales) {\n that.scales = scales;\n that.set_positional_scales();\n that.initialize_additional_scales();\n that.set_ranges();\n that.trigger(\"mark_scales_updated\");\n });\n }\n set_positional_scales() {\n // Positional scales are special in that they trigger a full redraw\n // when their domain is changed.\n // This should be overloaded in specific mark implementation.\n }\n initialize_additional_scales() {\n // This function is for the extra scales that are required for\n // rendering mark. The scale listeners are set up in this function.\n // This should be overloaded in the specific mark implementation.\n }\n set_internal_scales() {\n // Some marks such as Bars need to create additional scales\n // to draw themselves. In this case, the set_internal_scales\n // is overloaded.\n }\n create_listeners() {\n this.listenTo(this.model, \"change:visible\", this.update_visibility);\n this.listenTo(this.model, \"change:selected_style\", this.selected_style_updated);\n this.listenTo(this.model, \"change:unselected_style\", this.unselected_style_updated);\n this.parent.on(\"margin_updated\", this.relayout, this);\n this.model.on_some_change([\"labels\", \"display_legend\"], function () {\n this.model.trigger(\"redraw_legend\");\n }, this);\n }\n remove() {\n this.model.off(null, null, this);\n this.d3el.transition(\"remove\").duration(0).remove();\n this.tooltip_div.remove();\n super.remove();\n }\n draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) {\n elem.selectAll(\".legend\" + this.uuid).remove();\n elem.append(\"g\")\n .attr(\"transform\", \"translate(\" + x_disp + \", \" + y_disp + \")\")\n .attr(\"class\", \"legend\" + this.uuid)\n .on(\"mouseover\", _.bind(this.highlight_axes, this))\n .on(\"mouseout\", _.bind(this.unhighlight_axes, this))\n .append(\"text\")\n .text(this.model.get(\"labels\")[0]);\n return [1, 1];\n }\n highlight_axes() {\n _.each(this.model.get(\"scales\"), function (model) {\n model.trigger(\"highlight_axis\");\n });\n }\n unhighlight_axes() {\n _.each(this.model.get(\"scales\"), function (model) {\n model.trigger(\"unhighlight_axis\");\n });\n }\n relayout() {\n // Called when the figure margins are updated. To be overloaded in\n // specific mark implementation.\n }\n invert_range(start_pxl, end_pxl) {\n return [start_pxl, end_pxl];\n }\n invert_point(pxl) {\n }\n // TODO: is the following function really required?\n invert_multi_range(array_pixels) {\n return array_pixels;\n }\n update_visibility(model, visible) {\n this.d3el.style(\"display\", visible ? \"inline\" : \"none\");\n }\n get_colors(index) {\n // cycles over the list of colors when too many items\n this.colors = this.model.get(\"colors\");\n const len = this.colors.length;\n return this.colors[index % len];\n }\n get_mark_color(data, index) {\n const colorScale = this.scales.color;\n const defaultColors = this.model.get('colors');\n if (colorScale && data.color !== undefined && data.color !== null) {\n return colorScale.scale(data.color);\n }\n return defaultColors[index % defaultColors.length];\n }\n get_mark_opacity(data, index) {\n const opacityScale = this.scales.opacity;\n const defaultOpacities = this.model.get('opacities');\n if (opacityScale && data.opacity !== undefined && data.opacity !== null) {\n return opacityScale.scale(data.opacity);\n }\n return defaultOpacities[index % defaultOpacities.length];\n }\n // Style related functions\n selected_style_updated(model, style) {\n this.selected_style = style;\n this.clear_style(model.previous(\"selected_style\"), this.selected_indices);\n this.style_updated(style, this.selected_indices);\n }\n unselected_style_updated(model, style) {\n this.unselected_style = style;\n const sel_indices = this.selected_indices;\n const unselected_indices = (sel_indices) ?\n _.range(this.model.mark_data.length).filter(function (index) {\n return sel_indices.indexOf(index) === -1;\n }) : [];\n this.clear_style(model.previous(\"unselected_style\"), unselected_indices);\n this.style_updated(style, unselected_indices);\n }\n style_updated(new_style, indices, elements) {\n // reset the style of the elements and apply the new style\n this.set_default_style(indices);\n this.set_style_on_elements(new_style, indices);\n }\n apply_styles(style_arr) {\n if (style_arr === undefined || style_arr == null) {\n style_arr = [this.selected_style, this.unselected_style];\n }\n const all_indices = _.range(this.model.mark_data.length);\n for (var i = 0; i < style_arr.length; i++) {\n this.clear_style(style_arr[i]);\n }\n this.set_default_style(all_indices);\n this.set_style_on_elements(this.selected_style, Array.from(this.selected_indices || []));\n const unselected_indices = (!this.selected_indices) ?\n [] : _.difference(all_indices, Array.from(this.selected_indices));\n this.set_style_on_elements(this.unselected_style, unselected_indices);\n }\n show_tooltip(mouse_events) {\n //this function displays the tooltip at the location of the mouse\n //event is the d3 event for the data.\n //mouse_events is a boolean to enable mouse_events or not.\n //If this property has never been set, it will default to false.\n if (this.tooltip_view) {\n if (mouse_events === undefined || mouse_events === null || (!(mouse_events))) {\n this.tooltip_div.style(\"pointer-events\", \"none\");\n }\n else {\n this.tooltip_div.style(\"pointer-events\", \"all\");\n }\n this.tooltip_div.styles(this.model.get(\"tooltip_style\"))\n .style(\"display\", null);\n messaging_1.MessageLoop.sendMessage(this.tooltip_view.pWidget, widgets_1.Widget.Msg.AfterAttach);\n this.parent.popper.enableEventListeners();\n this.move_tooltip();\n }\n }\n move_tooltip(mouse_events) {\n if (this.tooltip_view) {\n this.parent.popper_reference.x = d3GetEvent().clientX;\n this.parent.popper_reference.y = d3GetEvent().clientY;\n this.parent.popper.scheduleUpdate();\n }\n }\n hide_tooltip() {\n //this function hides the tooltip. But the location of the tooltip\n //is the last location set by a call to show_tooltip.\n this.parent.popper.disableEventListeners();\n this.tooltip_div.style(\"pointer-events\", \"none\");\n this.tooltip_div.style(\"opacity\", 0)\n .style(\"display\", \"none\");\n }\n refresh_tooltip(tooltip_interactions = false) {\n //the argument controls pointer interactions with the tooltip. a\n //true value enables pointer interactions while a false value\n //disables them\n const el = d3.select(d3GetEvent().target);\n if (this.is_hover_element(el)) {\n const data = el.data()[0];\n const clicked_data = this.model.get_data_dict(data, data.index);\n this.trigger(\"update_tooltip\", clicked_data);\n this.show_tooltip(tooltip_interactions);\n }\n }\n create_tooltip() {\n //create tooltip widget. To be called after mark has been displayed\n //and whenever the tooltip object changes\n const tooltip_model = this.model.get(\"tooltip\");\n const that = this;\n //remove previous tooltip\n if (this.tooltip_view) {\n this.tooltip_view.remove();\n }\n if (tooltip_model) {\n this.create_child_view(tooltip_model).then(function (view) {\n that.tooltip_view = view;\n messaging_1.MessageLoop.sendMessage(view.pWidget, widgets_1.Widget.Msg.BeforeAttach);\n that.tooltip_div.node().appendChild(view.el);\n messaging_1.MessageLoop.sendMessage(view.pWidget, widgets_1.Widget.Msg.AfterAttach);\n });\n }\n }\n event_dispatcher(event_name, data) {\n //sends a custom mssg to the python side if required\n this.custom_msg_sender(event_name);\n if (this.event_listeners[event_name] !== undefined) {\n _.bind(this.event_listeners[event_name], this, data)();\n }\n }\n custom_msg_sender(event_name) {\n const event_data = this.event_metadata[event_name];\n if (event_data !== undefined) {\n let data = null;\n if (event_data.hit_test) {\n //do a hit test to check valid element\n const el = d3.select(d3GetEvent().target);\n if (this.is_hover_element(el)) {\n data = el.data()[0];\n if (event_data.lookup_data) {\n data = this.model.get_data_dict(data, data.index);\n }\n }\n else {\n //do not send mssg if hit test fails\n return;\n }\n }\n this.send({ event: event_data.msg_name, data: data });\n }\n }\n reset_click() {\n this.event_listeners.element_clicked = function () { };\n this.event_listeners.parent_clicked = function () { };\n }\n reset_hover() {\n this.event_listeners.mouse_over = function () { };\n this.event_listeners.mouse_move = function () { };\n this.event_listeners.mouse_out = function () { };\n }\n reset_legend_click() {\n this.event_listeners.legend_clicked = function () { };\n }\n reset_legend_hover() {\n this.event_listeners.legend_mouse_over = function () { };\n this.event_listeners.legend_mouse_out = function () { };\n }\n process_click(interaction) {\n const that = this;\n if (interaction === \"tooltip\") {\n this.event_listeners.element_clicked = function () {\n return that.refresh_tooltip(true);\n };\n this.event_listeners.parent_clicked = this.hide_tooltip;\n }\n }\n process_hover(interaction) {\n if (interaction === \"tooltip\") {\n this.event_listeners.mouse_over = this.refresh_tooltip;\n this.event_listeners.mouse_move = this.move_tooltip;\n this.event_listeners.mouse_out = this.hide_tooltip;\n }\n }\n process_legend_click(interaction) {\n const that = this;\n if (interaction === \"tooltip\") {\n this.event_listeners.legend_clicked = function () {\n return that.refresh_tooltip(true);\n };\n this.event_listeners.parent_clicked = this.hide_tooltip;\n }\n }\n process_legend_hover(interaction) {\n if (interaction === \"highlight_axes\") {\n this.event_listeners.legend_mouse_over = _.bind(this.highlight_axes, this);\n this.event_listeners.legend_mouse_out = _.bind(this.unhighlight_axes, this);\n }\n }\n process_interactions() {\n //configure default interactions\n const interactions = this.model.get(\"interactions\");\n if (is_defined(interactions.click)) {\n this.process_click(interactions.click);\n }\n else {\n this.reset_click();\n }\n if (is_defined(interactions.hover)) {\n this.process_hover(interactions.hover);\n }\n else {\n this.reset_hover();\n }\n if (is_defined(interactions.legend_click)) {\n this.process_legend_click(interactions.legend_click);\n }\n else {\n this.reset_legend_click();\n }\n if (is_defined(interactions.legend_hover)) {\n this.process_legend_hover(interactions.legend_hover);\n }\n else {\n this.reset_legend_hover();\n }\n }\n mouse_over() {\n if (this.model.get(\"enable_hover\")) {\n const el = d3.select(d3GetEvent().target);\n if (this.is_hover_element(el)) {\n const data = el.data()[0];\n //make tooltip visible\n const hovered_data = this.model.get_data_dict(data, data.index);\n this.trigger(\"update_tooltip\", hovered_data);\n this.show_tooltip();\n this.send({\n event: \"hover\",\n point: hovered_data,\n });\n }\n }\n }\n mouse_out() {\n if (this.model.get(\"enable_hover\")) {\n const el = d3.select(d3GetEvent().target);\n if (this.is_hover_element(el)) {\n const data = el.data()[0];\n const hovered_data = this.model.get_data_dict(data, data.index);\n // make tooltip invisible\n this.hide_tooltip();\n this.send({\n event: \"hover\",\n point: hovered_data,\n });\n }\n }\n }\n mouse_move() {\n if (this.model.get(\"enable_hover\") &&\n this.is_hover_element(d3.select(d3GetEvent().target))) {\n this.move_tooltip();\n }\n }\n //TODO: Rename function\n is_hover_element(elem) {\n const hit_check = this.display_el_classes.map(function (class_name) {\n return elem.classed(class_name);\n });\n return (_.compact(hit_check).length > 0);\n }\n}\nexports.Mark = Mark;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9NYXJrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCwrREFBaUQ7QUFDakQsdUNBQXlCO0FBQ3pCLDhCQUE0QjtBQUU1QixtREFFNkI7QUFFN0IsK0NBRTJCO0FBRTNCLDBHQUEwRztBQUMxRyxNQUFNLFVBQVUsR0FBRyxjQUFXLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0UsOENBQWdDO0FBR2hDLDJDQUEyQztBQUMzQyxTQUFTLFVBQVUsQ0FBQyxLQUFLO0lBQ3JCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQ2pELENBQUM7QUFBQSxDQUFDO0FBR0YsTUFBc0IsSUFBSyxTQUFRLE9BQU8sQ0FBQyxVQUFVO0lBRWpELFVBQVU7UUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxF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","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar algorithm_1 = require(\"@phosphor/algorithm\");\n/**\n * A concrete implementation of `ISignal`.\n *\n * #### Example\n * ```typescript\n * import { ISignal, Signal } from '@phosphor/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get valueChanged: ISignal<this, number> {\n * return this._valueChanged;\n * }\n *\n * get value(): number {\n * return this._value;\n * }\n *\n * set value(value: number) {\n * if (value === this._value) {\n * return;\n * }\n * this._value = value;\n * this._valueChanged.emit(value);\n * }\n *\n * private _value = 0;\n * private _valueChanged = new Signal<this, number>(this);\n * }\n *\n * function logger(sender: SomeClass, value: number): void {\n * console.log(sender.name, value);\n * }\n *\n * let m1 = new SomeClass('foo');\n * let m2 = new SomeClass('bar');\n *\n * m1.valueChanged.connect(logger);\n * m2.valueChanged.connect(logger);\n *\n * m1.value = 42; // logs: foo 42\n * m2.value = 17; // logs: bar 17\n * ```\n */\nvar Signal = /** @class */ (function () {\n /**\n * Construct a new signal.\n *\n * @param sender - The sender which owns the signal.\n */\n function Signal(sender) {\n this.sender = sender;\n }\n /**\n * Connect a slot to the signal.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n Signal.prototype.connect = function (slot, thisArg) {\n return Private.connect(this, slot, thisArg);\n };\n /**\n * Disconnect a slot from the signal.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n Signal.prototype.disconnect = function (slot, thisArg) {\n return Private.disconnect(this, slot, thisArg);\n };\n /**\n * Emit the signal and invoke the connected slots.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n Signal.prototype.emit = function (args) {\n Private.emit(this, args);\n };\n return Signal;\n}());\nexports.Signal = Signal;\n/**\n * The namespace for the `Signal` class statics.\n */\n(function (Signal) {\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectBetween(sender, receiver) {\n Private.disconnectBetween(sender, receiver);\n }\n Signal.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n Private.disconnectSender(sender);\n }\n Signal.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectReceiver(receiver) {\n Private.disconnectReceiver(receiver);\n }\n Signal.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectAll(object) {\n Private.disconnectAll(object);\n }\n Signal.disconnectAll = disconnectAll;\n /**\n * Clear all signal data associated with the given object.\n *\n * @param object - The object for which the data should be cleared.\n *\n * #### Notes\n * This removes all signal connections and any other signal data\n * associated with the object.\n */\n function clearData(object) {\n Private.disconnectAll(object);\n }\n Signal.clearData = clearData;\n /**\n * Get the signal exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return Private.exceptionHandler;\n }\n Signal.getExceptionHandler = getExceptionHandler;\n /**\n * Set the signal exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a slot throws an exception.\n */\n function setExceptionHandler(handler) {\n var old = Private.exceptionHandler;\n Private.exceptionHandler = handler;\n return old;\n }\n Signal.setExceptionHandler = setExceptionHandler;\n})(Signal = exports.Signal || (exports.Signal = {}));\nexports.Signal = Signal;\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The signal exception handler function.\n */\n Private.exceptionHandler = function (err) {\n console.error(err);\n };\n /**\n * Connect a slot to a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n function connect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Ensure the sender's array of receivers is created.\n var receivers = receiversForSender.get(signal.sender);\n if (!receivers) {\n receivers = [];\n receiversForSender.set(signal.sender, receivers);\n }\n // Bail if a matching connection already exists.\n if (findConnection(receivers, signal, slot, thisArg)) {\n return false;\n }\n // Choose the best object for the receiver.\n var receiver = thisArg || slot;\n // Ensure the receiver's array of senders is created.\n var senders = sendersForReceiver.get(receiver);\n if (!senders) {\n senders = [];\n sendersForReceiver.set(receiver, senders);\n }\n // Create a new connection and add it to the end of each array.\n var connection = { signal: signal, slot: slot, thisArg: thisArg };\n receivers.push(connection);\n senders.push(connection);\n // Indicate a successful connection.\n return true;\n }\n Private.connect = connect;\n /**\n * Disconnect a slot from a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n function disconnect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Lookup the list of receivers, and bail if none exist.\n var receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return false;\n }\n // Bail if no matching connection exits.\n var connection = findConnection(receivers, signal, slot, thisArg);\n if (!connection) {\n return false;\n }\n // Choose the best object for the receiver.\n var receiver = thisArg || slot;\n // Lookup the array of senders, which is now known to exist.\n var senders = sendersForReceiver.get(receiver);\n // Clear the connection and schedule cleanup of the arrays.\n connection.signal = null;\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n // Indicate a successful disconnection.\n return true;\n }\n Private.disconnect = disconnect;\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectBetween(sender, receiver) {\n // If there are no receivers, there is nothing to do.\n var receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // If there are no senders, there is nothing to do.\n var senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each connection between the sender and receiver.\n algorithm_1.each(senders, function (connection) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n return;\n }\n // Clear the connection if it matches the sender.\n if (connection.signal.sender === sender) {\n connection.signal = null;\n }\n });\n // Schedule a cleanup of the senders and receivers.\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n }\n Private.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n // If there are no receivers, there is nothing to do.\n var receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Clear each receiver connection.\n algorithm_1.each(receivers, function (connection) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n return;\n }\n // Choose the best object for the receiver.\n var receiver = connection.thisArg || connection.slot;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of senders, which is now known to exist.\n scheduleCleanup(sendersForReceiver.get(receiver));\n });\n // Schedule a cleanup of the receivers.\n scheduleCleanup(receivers);\n }\n Private.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectReceiver(receiver) {\n // If there are no senders, there is nothing to do.\n var senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each sender connection.\n algorithm_1.each(senders, function (connection) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n return;\n }\n // Lookup the sender for the connection.\n var sender = connection.signal.sender;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of receivers, which is now known to exist.\n scheduleCleanup(receiversForSender.get(sender));\n });\n // Schedule a cleanup of the list of senders.\n scheduleCleanup(senders);\n }\n Private.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n */\n function disconnectAll(object) {\n // Clear and cleanup any receiver connections.\n var receivers = receiversForSender.get(object);\n if (receivers && receivers.length > 0) {\n algorithm_1.each(receivers, function (connection) { connection.signal = null; });\n scheduleCleanup(receivers);\n }\n // Clear and cleanup any sender connections.\n var senders = sendersForReceiver.get(object);\n if (senders && senders.length > 0) {\n algorithm_1.each(senders, function (connection) { connection.signal = null; });\n scheduleCleanup(senders);\n }\n }\n Private.disconnectAll = disconnectAll;\n /**\n * Emit a signal and invoke its connected slots.\n *\n * @param signal - The signal of interest.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n function emit(signal, args) {\n // If there are no receivers, there is nothing to do.\n var receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Invoke the slots for connections with a matching signal.\n // Any connections added during emission are not invoked.\n for (var i = 0, n = receivers.length; i < n; ++i) {\n var connection = receivers[i];\n if (connection.signal === signal) {\n invokeSlot(connection, args);\n }\n }\n }\n Private.emit = emit;\n /**\n * A weak mapping of sender to array of receiver connections.\n */\n var receiversForSender = new WeakMap();\n /**\n * A weak mapping of receiver to array of sender connections.\n */\n var sendersForReceiver = new WeakMap();\n /**\n * A set of connection arrays which are pending cleanup.\n */\n var dirtySet = new Set();\n /**\n * A function to schedule an event loop callback.\n */\n var schedule = (function () {\n var ok = typeof requestAnimationFrame === 'function';\n return ok ? requestAnimationFrame : setImmediate;\n })();\n /**\n * Find a connection which matches the given parameters.\n */\n function findConnection(connections, signal, slot, thisArg) {\n return algorithm_1.find(connections, function (connection) { return (connection.signal === signal &&\n connection.slot === slot &&\n connection.thisArg === thisArg); });\n }\n /**\n * Invoke a slot with the given parameters.\n *\n * The connection is assumed to be valid.\n *\n * Exceptions in the slot will be caught and logged.\n */\n function invokeSlot(connection, args) {\n var signal = connection.signal, slot = connection.slot, thisArg = connection.thisArg;\n try {\n slot.call(thisArg, signal.sender, args);\n }\n catch (err) {\n Private.exceptionHandler(err);\n }\n }\n /**\n * Schedule a cleanup of a connection array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any connection with a\n * `null` signal will be removed from the array.\n */\n function scheduleCleanup(array) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(array);\n }\n /**\n * Cleanup the connection lists in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupConnections);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty connections in a connections array.\n *\n * This will remove any connection with a `null` signal.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupConnections(connections) {\n algorithm_1.ArrayExt.removeAllWhere(connections, isDeadConnection);\n }\n /**\n * Test whether a connection is dead.\n *\n * A dead connection has a `null` signal.\n */\n function isDeadConnection(connection) {\n return connection.signal === null;\n }\n})(Private || (Private = {}));\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export {default as dispatch} from \"./dispatch\";\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\nimport transition_end from \"./end\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import \"./selection/index\";\nexport {default as transition} from \"./transition/index\";\nexport {default as active} from \"./active\";\nexport {default as interrupt} from \"./interrupt\";\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {Timer, now} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n delay = +delay, time = time == null ? now() : +time;\n t.restart(function tick(elapsed) {\n elapsed += total;\n t.restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n return t;\n}\n","export {\n now,\n timer,\n timerFlush\n} from \"./timer\";\n\nexport {\n default as timeout\n} from \"./timeout\";\n\nexport {\n default as interval\n} from \"./interval\";\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export {default as formatDefaultLocale, format, formatPrefix} from \"./defaultLocale\";\nexport {default as formatLocale} from \"./locale\";\nexport {default as formatSpecifier} from \"./formatSpecifier\";\nexport {default as precisionFixed} from \"./precisionFixed\";\nexport {default as precisionPrefix} from \"./precisionPrefix\";\nexport {default as precisionRound} from \"./precisionRound\";\n","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.semver_range = \"^\" + require(\"../package.json\").version;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUVVLFFBQUEsWUFBWSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMifQ==","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Create an iterator for an iterable object.\n *\n * @param object - The iterable or array-like object of interest.\n *\n * @returns A new iterator for the given object.\n *\n * #### Notes\n * This function allows iteration algorithms to operate on user-defined\n * iterable types and builtin array-like objects in a uniform fashion.\n */\nfunction iter(object) {\n var it;\n if (typeof object.iter === 'function') {\n it = object.iter();\n }\n else {\n it = new ArrayIterator(object);\n }\n return it;\n}\nexports.iter = iter;\n/**\n * Invoke a function for each value in an iterable.\n *\n * @param object - The iterable or array-like object of interest.\n *\n * @param fn - The callback function to invoke for each value.\n *\n * #### Notes\n * Iteration can be terminated early by returning `false` from the\n * callback function.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { each } from '@phosphor/algorithm';\n *\n * let data = [5, 7, 0, -2, 9];\n *\n * each(data, value => { console.log(value); });\n * ```\n */\nfunction each(object, fn) {\n var index = 0;\n var it = iter(object);\n var value;\n while ((value = it.next()) !== undefined) {\n if (fn(value, index++) === false) {\n return;\n }\n }\n}\nexports.each = each;\n/**\n * Test whether all values in an iterable satisfy a predicate.\n *\n * @param object - The iterable or array-like object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if all values pass the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `false` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { every } from '@phosphor/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * every(data, value => value % 2 === 0); // false\n * every(data, value => value % 2 === 1); // true\n * ```\n */\nfunction every(object, fn) {\n var index = 0;\n var it = iter(object);\n var value;\n while ((value = it.next()) !== undefined) {\n if (!fn(value, index++)) {\n return false;\n }\n }\n return true;\n}\nexports.every = every;\n/**\n * Test whether any value in an iterable satisfies a predicate.\n *\n * @param object - The iterable or array-like object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if any value passes the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `true` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { some } from '@phosphor/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * some(data, value => value === 7); // true\n * some(data, value => value === 3); // false\n * ```\n */\nfunction some(object, fn) {\n var index = 0;\n var it = iter(object);\n var value;\n while ((value = it.next()) !== undefined) {\n if (fn(value, index++)) {\n return true;\n }\n }\n return false;\n}\nexports.some = some;\n/**\n * Create an array from an iterable of values.\n *\n * @param object - The iterable or array-like object of interest.\n *\n * @returns A new array of values from the given object.\n *\n * #### Example\n * ```typescript\n * import { iter, toArray } from '@phosphor/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = iter(data);\n *\n * toArray(stream); // [1, 2, 3, 4, 5, 6];\n * ```\n */\nfunction toArray(object) {\n var index = 0;\n var result = [];\n var it = iter(object);\n var value;\n while ((value = it.next()) !== undefined) {\n result[index++] = value;\n }\n return result;\n}\nexports.toArray = toArray;\n/**\n * An iterator for an array-like object.\n *\n * #### Notes\n * This iterator can be used for any builtin JS array-like object.\n */\nvar ArrayIterator = /** @class */ (function () {\n /**\n * Construct a new array iterator.\n *\n * @param source - The array-like object of interest.\n */\n function ArrayIterator(source) {\n this._index = 0;\n this._source = source;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n ArrayIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n ArrayIterator.prototype.clone = function () {\n var result = new ArrayIterator(this._source);\n result._index = this._index;\n return result;\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n ArrayIterator.prototype.next = function () {\n if (this._index >= this._source.length) {\n return undefined;\n }\n return this._source[this._index++];\n };\n return ArrayIterator;\n}());\nexports.ArrayIterator = ArrayIterator;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","import {selection} from \"d3-selection\";\nimport {transition} from \"d3-transition\";\nimport selection_attrs from \"./src/selection/attrs\";\nimport selection_styles from \"./src/selection/styles\";\nimport selection_properties from \"./src/selection/properties\";\nimport transition_attrs from \"./src/transition/attrs\";\nimport transition_styles from \"./src/transition/styles\";\n\nselection.prototype.attrs = selection_attrs;\nselection.prototype.styles = selection_styles;\nselection.prototype.properties = selection_properties;\ntransition.prototype.attrs = transition_attrs;\ntransition.prototype.styles = transition_styles;\n","import {select} from \"d3-selection\";\n\nfunction attrsFunction(selection, map) {\n return selection.each(function() {\n var x = map.apply(this, arguments), s = select(this);\n for (var name in x) s.attr(name, x[name]);\n });\n}\n\nfunction attrsObject(selection, map) {\n for (var name in map) selection.attr(name, map[name]);\n return selection;\n}\n\nexport default function(map) {\n return (typeof map === \"function\" ? attrsFunction : attrsObject)(this, map);\n}\n","import {select} from \"d3-selection\";\n\nfunction stylesFunction(selection, map, priority) {\n return selection.each(function() {\n var x = map.apply(this, arguments), s = select(this);\n for (var name in x) s.style(name, x[name], priority);\n });\n}\n\nfunction stylesObject(selection, map, priority) {\n for (var name in map) selection.style(name, map[name], priority);\n return selection;\n}\n\nexport default function(map, priority) {\n return (typeof map === \"function\" ? stylesFunction : stylesObject)(this, map, priority == null ? \"\" : priority);\n}\n","import {select} from \"d3-selection\";\n\nfunction propertiesFunction(selection, map) {\n return selection.each(function() {\n var x = map.apply(this, arguments), s = select(this);\n for (var name in x) s.property(name, x[name]);\n });\n}\n\nfunction propertiesObject(selection, map) {\n for (var name in map) selection.property(name, map[name]);\n return selection;\n}\n\nexport default function(map) {\n return (typeof map === \"function\" ? propertiesFunction : propertiesObject)(this, map);\n}\n","import {select} from \"d3-selection\";\n\nfunction attrsFunction(transition, map) {\n return transition.each(function() {\n var x = map.apply(this, arguments), t = select(this).transition(transition);\n for (var name in x) t.attr(name, x[name]);\n });\n}\n\nfunction attrsObject(transition, map) {\n for (var name in map) transition.attr(name, map[name]);\n return transition;\n}\n\nexport default function(map) {\n return (typeof map === \"function\" ? attrsFunction : attrsObject)(this, map);\n}\n","import {select} from \"d3-selection\";\n\nfunction stylesFunction(transition, map, priority) {\n return transition.each(function() {\n var x = map.apply(this, arguments), t = select(this).transition(transition);\n for (var name in x) t.style(name, x[name], priority);\n });\n}\n\nfunction stylesObject(transition, map, priority) {\n for (var name in map) transition.style(name, map[name], priority);\n return transition;\n}\n\nexport default function(map, priority) {\n return (typeof map === \"function\" ? stylesFunction : stylesObject)(this, map, priority == null ? \"\" : priority);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","export default function(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n}\n","export default function(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n}\n","export default function(map) {\n var entries = [];\n for (var key in map) entries.push({key: key, value: map[key]});\n return entries;\n}\n","export {default as nest} from \"./nest\";\nexport {default as set} from \"./set\";\nexport {default as map} from \"./map\";\nexport {default as keys} from \"./keys\";\nexport {default as values} from \"./values\";\nexport {default as entries} from \"./entries\";\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar properties_1 = require(\"@phosphor/properties\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * An abstract base class for creating Phosphor layouts.\r\n *\r\n * #### Notes\r\n * A layout is used to add widgets to a parent and to arrange those\r\n * widgets within the parent's DOM node.\r\n *\r\n * This class implements the base functionality which is required of\r\n * nearly all layouts. It must be subclassed in order to be useful.\r\n *\r\n * Notably, this class does not define a uniform interface for adding\r\n * widgets to the layout. A subclass should define that API in a way\r\n * which is meaningful for its intended use.\r\n */\r\nvar Layout = /** @class */ (function () {\r\n /**\r\n * Construct a new layout.\r\n *\r\n * @param options - The options for initializing the layout.\r\n */\r\n function Layout(options) {\r\n if (options === void 0) { options = {}; }\r\n this._disposed = false;\r\n this._parent = null;\r\n this._fitPolicy = options.fitPolicy || 'set-min-size';\r\n }\r\n /**\r\n * Dispose of the resources held by the layout.\r\n *\r\n * #### Notes\r\n * This should be reimplemented to clear and dispose of the widgets.\r\n *\r\n * All reimplementations should call the superclass method.\r\n *\r\n * This method is called automatically when the parent is disposed.\r\n */\r\n Layout.prototype.dispose = function () {\r\n this._parent = null;\r\n this._disposed = true;\r\n signaling_1.Signal.clearData(this);\r\n properties_1.AttachedProperty.clearData(this);\r\n };\r\n Object.defineProperty(Layout.prototype, \"isDisposed\", {\r\n /**\r\n * Test whether the layout is disposed.\r\n */\r\n get: function () {\r\n return this._disposed;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Layout.prototype, \"parent\", {\r\n /**\r\n * Get the parent widget of the layout.\r\n */\r\n get: function () {\r\n return this._parent;\r\n },\r\n /**\r\n * Set the parent widget of the layout.\r\n *\r\n * #### Notes\r\n * This is set automatically when installing the layout on the parent\r\n * widget. The parent widget should not be set directly by user code.\r\n */\r\n set: function (value) {\r\n if (this._parent === value) {\r\n return;\r\n }\r\n if (this._parent) {\r\n throw new Error('Cannot change parent widget.');\r\n }\r\n if (value.layout !== this) {\r\n throw new Error('Invalid parent widget.');\r\n }\r\n this._parent = value;\r\n this.init();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Layout.prototype, \"fitPolicy\", {\r\n /**\r\n * Get the fit policy for the layout.\r\n *\r\n * #### Notes\r\n * The fit policy controls the computed size constraints which are\r\n * applied to the parent widget by the layout.\r\n *\r\n * Some layout implementations may ignore the fit policy.\r\n */\r\n get: function () {\r\n return this._fitPolicy;\r\n },\r\n /**\r\n * Set the fit policy for the layout.\r\n *\r\n * #### Notes\r\n * The fit policy controls the computed size constraints which are\r\n * applied to the parent widget by the layout.\r\n *\r\n * Some layout implementations may ignore the fit policy.\r\n *\r\n * Changing the fit policy will clear the current size constraint\r\n * for the parent widget and then re-fit the parent.\r\n */\r\n set: function (value) {\r\n // Bail if the policy does not change\r\n if (this._fitPolicy === value) {\r\n return;\r\n }\r\n // Update the internal policy.\r\n this._fitPolicy = value;\r\n // Clear the size constraints and schedule a fit of the parent.\r\n if (this._parent) {\r\n var style = this._parent.node.style;\r\n style.minWidth = '';\r\n style.minHeight = '';\r\n style.maxWidth = '';\r\n style.maxHeight = '';\r\n this._parent.fit();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Process a message sent to the parent widget.\r\n *\r\n * @param msg - The message sent to the parent widget.\r\n *\r\n * #### Notes\r\n * This method is called by the parent widget to process a message.\r\n *\r\n * Subclasses may reimplement this method as needed.\r\n */\r\n Layout.prototype.processParentMessage = function (msg) {\r\n switch (msg.type) {\r\n case 'resize':\r\n this.onResize(msg);\r\n break;\r\n case 'update-request':\r\n this.onUpdateRequest(msg);\r\n break;\r\n case 'fit-request':\r\n this.onFitRequest(msg);\r\n break;\r\n case 'before-show':\r\n this.onBeforeShow(msg);\r\n break;\r\n case 'after-show':\r\n this.onAfterShow(msg);\r\n break;\r\n case 'before-hide':\r\n this.onBeforeHide(msg);\r\n break;\r\n case 'after-hide':\r\n this.onAfterHide(msg);\r\n break;\r\n case 'before-attach':\r\n this.onBeforeAttach(msg);\r\n break;\r\n case 'after-attach':\r\n this.onAfterAttach(msg);\r\n break;\r\n case 'before-detach':\r\n this.onBeforeDetach(msg);\r\n break;\r\n case 'after-detach':\r\n this.onAfterDetach(msg);\r\n break;\r\n case 'child-removed':\r\n this.onChildRemoved(msg);\r\n break;\r\n case 'child-shown':\r\n this.onChildShown(msg);\r\n break;\r\n case 'child-hidden':\r\n this.onChildHidden(msg);\r\n break;\r\n }\r\n };\r\n /**\r\n * Perform layout initialization which requires the parent widget.\r\n *\r\n * #### Notes\r\n * This method is invoked immediately after the layout is installed\r\n * on the parent widget.\r\n *\r\n * The default implementation reparents all of the widgets to the\r\n * layout parent widget.\r\n *\r\n * Subclasses should reimplement this method and attach the child\r\n * widget nodes to the parent widget's node.\r\n */\r\n Layout.prototype.init = function () {\r\n var _this = this;\r\n algorithm_1.each(this, function (widget) {\r\n widget.parent = _this.parent;\r\n });\r\n };\r\n /**\r\n * A message handler invoked on a `'resize'` message.\r\n *\r\n * #### Notes\r\n * The layout should ensure that its widgets are resized according\r\n * to the specified layout space, and that they are sent a `'resize'`\r\n * message if appropriate.\r\n *\r\n * The default implementation of this method sends an `UnknownSize`\r\n * resize message to all widgets.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onResize = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.ResizeMessage.UnknownSize);\r\n });\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n *\r\n * #### Notes\r\n * The layout should ensure that its widgets are resized according\r\n * to the available layout space, and that they are sent a `'resize'`\r\n * message if appropriate.\r\n *\r\n * The default implementation of this method sends an `UnknownSize`\r\n * resize message to all widgets.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onUpdateRequest = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.ResizeMessage.UnknownSize);\r\n });\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this method forwards the message\r\n * to all widgets. It assumes all widget nodes are attached to the\r\n * parent widget node.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onBeforeAttach = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n messaging_1.MessageLoop.sendMessage(widget, msg);\r\n });\r\n };\r\n /**\r\n * A message handler invoked on an `'after-attach'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this method forwards the message\r\n * to all widgets. It assumes all widget nodes are attached to the\r\n * parent widget node.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onAfterAttach = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n messaging_1.MessageLoop.sendMessage(widget, msg);\r\n });\r\n };\r\n /**\r\n * A message handler invoked on a `'before-detach'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this method forwards the message\r\n * to all widgets. It assumes all widget nodes are attached to the\r\n * parent widget node.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onBeforeDetach = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n messaging_1.MessageLoop.sendMessage(widget, msg);\r\n });\r\n };\r\n /**\r\n * A message handler invoked on an `'after-detach'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this method forwards the message\r\n * to all widgets. It assumes all widget nodes are attached to the\r\n * parent widget node.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onAfterDetach = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n messaging_1.MessageLoop.sendMessage(widget, msg);\r\n });\r\n };\r\n /**\r\n * A message handler invoked on a `'before-show'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this method forwards the message to\r\n * all non-hidden widgets. It assumes all widget nodes are attached\r\n * to the parent widget node.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onBeforeShow = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n if (!widget.isHidden) {\r\n messaging_1.MessageLoop.sendMessage(widget, msg);\r\n }\r\n });\r\n };\r\n /**\r\n * A message handler invoked on an `'after-show'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this method forwards the message to\r\n * all non-hidden widgets. It assumes all widget nodes are attached\r\n * to the parent widget node.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onAfterShow = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n if (!widget.isHidden) {\r\n messaging_1.MessageLoop.sendMessage(widget, msg);\r\n }\r\n });\r\n };\r\n /**\r\n * A message handler invoked on a `'before-hide'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this method forwards the message to\r\n * all non-hidden widgets. It assumes all widget nodes are attached\r\n * to the parent widget node.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onBeforeHide = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n if (!widget.isHidden) {\r\n messaging_1.MessageLoop.sendMessage(widget, msg);\r\n }\r\n });\r\n };\r\n /**\r\n * A message handler invoked on an `'after-hide'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this method forwards the message to\r\n * all non-hidden widgets. It assumes all widget nodes are attached\r\n * to the parent widget node.\r\n *\r\n * This may be reimplemented by subclasses as needed.\r\n */\r\n Layout.prototype.onAfterHide = function (msg) {\r\n algorithm_1.each(this, function (widget) {\r\n if (!widget.isHidden) {\r\n messaging_1.MessageLoop.sendMessage(widget, msg);\r\n }\r\n });\r\n };\r\n /**\r\n * A message handler invoked on a `'child-removed'` message.\r\n *\r\n * #### Notes\r\n * This will remove the child widget from the layout.\r\n *\r\n * Subclasses should **not** typically reimplement this method.\r\n */\r\n Layout.prototype.onChildRemoved = function (msg) {\r\n this.removeWidget(msg.child);\r\n };\r\n /**\r\n * A message handler invoked on a `'fit-request'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Layout.prototype.onFitRequest = function (msg) { };\r\n /**\r\n * A message handler invoked on a `'child-shown'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Layout.prototype.onChildShown = function (msg) { };\r\n /**\r\n * A message handler invoked on a `'child-hidden'` message.\r\n *\r\n * #### Notes\r\n * The default implementation of this handler is a no-op.\r\n */\r\n Layout.prototype.onChildHidden = function (msg) { };\r\n return Layout;\r\n}());\r\nexports.Layout = Layout;\r\n/**\r\n * The namespace for the `Layout` class statics.\r\n */\r\n(function (Layout) {\r\n /**\r\n * Get the horizontal alignment for a widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The horizontal alignment for the widget.\r\n *\r\n * #### Notes\r\n * If the layout width allocated to a widget is larger than its max\r\n * width, the horizontal alignment controls how the widget is placed\r\n * within the extra horizontal space.\r\n *\r\n * If the allocated width is less than the widget's max width, the\r\n * horizontal alignment has no effect.\r\n *\r\n * Some layout implementations may ignore horizontal alignment.\r\n */\r\n function getHorizontalAlignment(widget) {\r\n return Private.horizontalAlignmentProperty.get(widget);\r\n }\r\n Layout.getHorizontalAlignment = getHorizontalAlignment;\r\n /**\r\n * Set the horizontal alignment for a widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param value - The value for the horizontal alignment.\r\n *\r\n * #### Notes\r\n * If the layout width allocated to a widget is larger than its max\r\n * width, the horizontal alignment controls how the widget is placed\r\n * within the extra horizontal space.\r\n *\r\n * If the allocated width is less than the widget's max width, the\r\n * horizontal alignment has no effect.\r\n *\r\n * Some layout implementations may ignore horizontal alignment.\r\n *\r\n * Changing the horizontal alignment will post an `update-request`\r\n * message to widget's parent, provided the parent has a layout\r\n * installed.\r\n */\r\n function setHorizontalAlignment(widget, value) {\r\n Private.horizontalAlignmentProperty.set(widget, value);\r\n }\r\n Layout.setHorizontalAlignment = setHorizontalAlignment;\r\n /**\r\n * Get the vertical alignment for a widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The vertical alignment for the widget.\r\n *\r\n * #### Notes\r\n * If the layout height allocated to a widget is larger than its max\r\n * height, the vertical alignment controls how the widget is placed\r\n * within the extra vertical space.\r\n *\r\n * If the allocated height is less than the widget's max height, the\r\n * vertical alignment has no effect.\r\n *\r\n * Some layout implementations may ignore vertical alignment.\r\n */\r\n function getVerticalAlignment(widget) {\r\n return Private.verticalAlignmentProperty.get(widget);\r\n }\r\n Layout.getVerticalAlignment = getVerticalAlignment;\r\n /**\r\n * Set the vertical alignment for a widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param value - The value for the vertical alignment.\r\n *\r\n * #### Notes\r\n * If the layout height allocated to a widget is larger than its max\r\n * height, the vertical alignment controls how the widget is placed\r\n * within the extra vertical space.\r\n *\r\n * If the allocated height is less than the widget's max height, the\r\n * vertical alignment has no effect.\r\n *\r\n * Some layout implementations may ignore vertical alignment.\r\n *\r\n * Changing the horizontal alignment will post an `update-request`\r\n * message to widget's parent, provided the parent has a layout\r\n * installed.\r\n */\r\n function setVerticalAlignment(widget, value) {\r\n Private.verticalAlignmentProperty.set(widget, value);\r\n }\r\n Layout.setVerticalAlignment = setVerticalAlignment;\r\n})(Layout = exports.Layout || (exports.Layout = {}));\r\nexports.Layout = Layout;\r\n/**\r\n * An object which assists in the absolute layout of widgets.\r\n *\r\n * #### Notes\r\n * This class is useful when implementing a layout which arranges its\r\n * widgets using absolute positioning.\r\n *\r\n * This class is used by nearly all of the built-in Phosphor layouts.\r\n */\r\nvar LayoutItem = /** @class */ (function () {\r\n /**\r\n * Construct a new layout item.\r\n *\r\n * @param widget - The widget to be managed by the item.\r\n *\r\n * #### Notes\r\n * The widget will be set to absolute positioning.\r\n */\r\n function LayoutItem(widget) {\r\n this._top = NaN;\r\n this._left = NaN;\r\n this._width = NaN;\r\n this._height = NaN;\r\n this._minWidth = 0;\r\n this._minHeight = 0;\r\n this._maxWidth = Infinity;\r\n this._maxHeight = Infinity;\r\n this._disposed = false;\r\n this.widget = widget;\r\n this.widget.node.style.position = 'absolute';\r\n }\r\n /**\r\n * Dispose of the the layout item.\r\n *\r\n * #### Notes\r\n * This will reset the positioning of the widget.\r\n */\r\n LayoutItem.prototype.dispose = function () {\r\n // Do nothing if the item is already disposed.\r\n if (this._disposed) {\r\n return;\r\n }\r\n // Mark the item as disposed.\r\n this._disposed = true;\r\n // Reset the widget style.\r\n var style = this.widget.node.style;\r\n style.position = '';\r\n style.top = '';\r\n style.left = '';\r\n style.width = '';\r\n style.height = '';\r\n };\r\n Object.defineProperty(LayoutItem.prototype, \"minWidth\", {\r\n /**\r\n * The computed minimum width of the widget.\r\n *\r\n * #### Notes\r\n * This value can be updated by calling the `fit` method.\r\n */\r\n get: function () {\r\n return this._minWidth;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LayoutItem.prototype, \"minHeight\", {\r\n /**\r\n * The computed minimum height of the widget.\r\n *\r\n * #### Notes\r\n * This value can be updated by calling the `fit` method.\r\n */\r\n get: function () {\r\n return this._minHeight;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LayoutItem.prototype, \"maxWidth\", {\r\n /**\r\n * The computed maximum width of the widget.\r\n *\r\n * #### Notes\r\n * This value can be updated by calling the `fit` method.\r\n */\r\n get: function () {\r\n return this._maxWidth;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LayoutItem.prototype, \"maxHeight\", {\r\n /**\r\n * The computed maximum height of the widget.\r\n *\r\n * #### Notes\r\n * This value can be updated by calling the `fit` method.\r\n */\r\n get: function () {\r\n return this._maxHeight;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LayoutItem.prototype, \"isDisposed\", {\r\n /**\r\n * Whether the layout item is disposed.\r\n */\r\n get: function () {\r\n return this._disposed;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LayoutItem.prototype, \"isHidden\", {\r\n /**\r\n * Whether the managed widget is hidden.\r\n */\r\n get: function () {\r\n return this.widget.isHidden;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LayoutItem.prototype, \"isVisible\", {\r\n /**\r\n * Whether the managed widget is visible.\r\n */\r\n get: function () {\r\n return this.widget.isVisible;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LayoutItem.prototype, \"isAttached\", {\r\n /**\r\n * Whether the managed widget is attached.\r\n */\r\n get: function () {\r\n return this.widget.isAttached;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Update the computed size limits of the managed widget.\r\n */\r\n LayoutItem.prototype.fit = function () {\r\n var limits = domutils_1.ElementExt.sizeLimits(this.widget.node);\r\n this._minWidth = limits.minWidth;\r\n this._minHeight = limits.minHeight;\r\n this._maxWidth = limits.maxWidth;\r\n this._maxHeight = limits.maxHeight;\r\n };\r\n /**\r\n * Update the position and size of the managed widget.\r\n *\r\n * @param left - The left edge position of the layout box.\r\n *\r\n * @param top - The top edge position of the layout box.\r\n *\r\n * @param width - The width of the layout box.\r\n *\r\n * @param height - The height of the layout box.\r\n */\r\n LayoutItem.prototype.update = function (left, top, width, height) {\r\n // Clamp the size to the computed size limits.\r\n var clampW = Math.max(this._minWidth, Math.min(width, this._maxWidth));\r\n var clampH = Math.max(this._minHeight, Math.min(height, this._maxHeight));\r\n // Adjust the left edge for the horizontal alignment, if needed.\r\n if (clampW < width) {\r\n switch (Layout.getHorizontalAlignment(this.widget)) {\r\n case 'left':\r\n break;\r\n case 'center':\r\n left += (width - clampW) / 2;\r\n break;\r\n case 'right':\r\n left += width - clampW;\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n }\r\n // Adjust the top edge for the vertical alignment, if needed.\r\n if (clampH < height) {\r\n switch (Layout.getVerticalAlignment(this.widget)) {\r\n case 'top':\r\n break;\r\n case 'center':\r\n top += (height - clampH) / 2;\r\n break;\r\n case 'bottom':\r\n top += height - clampH;\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n }\r\n // Set up the resize variables.\r\n var resized = false;\r\n var style = this.widget.node.style;\r\n // Update the top edge of the widget if needed.\r\n if (this._top !== top) {\r\n this._top = top;\r\n style.top = top + \"px\";\r\n }\r\n // Update the left edge of the widget if needed.\r\n if (this._left !== left) {\r\n this._left = left;\r\n style.left = left + \"px\";\r\n }\r\n // Update the width of the widget if needed.\r\n if (this._width !== clampW) {\r\n resized = true;\r\n this._width = clampW;\r\n style.width = clampW + \"px\";\r\n }\r\n // Update the height of the widget if needed.\r\n if (this._height !== clampH) {\r\n resized = true;\r\n this._height = clampH;\r\n style.height = clampH + \"px\";\r\n }\r\n // Send a resize message to the widget if needed.\r\n if (resized) {\r\n var msg = new widget_1.Widget.ResizeMessage(clampW, clampH);\r\n messaging_1.MessageLoop.sendMessage(this.widget, msg);\r\n }\r\n };\r\n return LayoutItem;\r\n}());\r\nexports.LayoutItem = LayoutItem;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * The attached property for a widget horizontal alignment.\r\n */\r\n Private.horizontalAlignmentProperty = new properties_1.AttachedProperty({\r\n name: 'horizontalAlignment',\r\n create: function () { return 'center'; },\r\n changed: onAlignmentChanged\r\n });\r\n /**\r\n * The attached property for a widget vertical alignment.\r\n */\r\n Private.verticalAlignmentProperty = new properties_1.AttachedProperty({\r\n name: 'verticalAlignment',\r\n create: function () { return 'top'; },\r\n changed: onAlignmentChanged\r\n });\r\n /**\r\n * The change handler for the attached alignment properties.\r\n */\r\n function onAlignmentChanged(child) {\r\n if (child.parent && child.parent.layout) {\r\n child.parent.update();\r\n }\r\n }\r\n})(Private || (Private = {}));\r\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A class which attaches a value to an external object.\n *\n * #### Notes\n * Attached properties are used to extend the state of an object with\n * semantic data from an unrelated class. They also encapsulate value\n * creation, coercion, and notification.\n *\n * Because attached property values are stored in a hash table, which\n * in turn is stored in a WeakMap keyed on the owner object, there is\n * non-trivial storage overhead involved in their use. The pattern is\n * therefore best used for the storage of rare data.\n */\nvar AttachedProperty = /** @class */ (function () {\n /**\n * Construct a new attached property.\n *\n * @param options - The options for initializing the property.\n */\n function AttachedProperty(options) {\n this._pid = Private.nextPID();\n this.name = options.name;\n this._create = options.create;\n this._coerce = options.coerce || null;\n this._compare = options.compare || null;\n this._changed = options.changed || null;\n }\n /**\n * Get the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @returns The current value of the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and assigned as the current value of the property.\n */\n AttachedProperty.prototype.get = function (owner) {\n var value;\n var map = Private.ensureMap(owner);\n if (this._pid in map) {\n value = map[this._pid];\n }\n else {\n value = map[this._pid] = this._createValue(owner);\n }\n return value;\n };\n /**\n * Set the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @param value - The value for the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n AttachedProperty.prototype.set = function (owner, value) {\n var oldValue;\n var map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n var newValue = this._coerceValue(owner, value);\n this._maybeNotify(owner, oldValue, map[this._pid] = newValue);\n };\n /**\n * Explicitly coerce the current property value for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n AttachedProperty.prototype.coerce = function (owner) {\n var oldValue;\n var map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n var newValue = this._coerceValue(owner, oldValue);\n this._maybeNotify(owner, oldValue, map[this._pid] = newValue);\n };\n /**\n * Get or create the default value for the given owner.\n */\n AttachedProperty.prototype._createValue = function (owner) {\n var create = this._create;\n return create(owner);\n };\n /**\n * Coerce the value for the given owner.\n */\n AttachedProperty.prototype._coerceValue = function (owner, value) {\n var coerce = this._coerce;\n return coerce ? coerce(owner, value) : value;\n };\n /**\n * Compare the old value and new value for equality.\n */\n AttachedProperty.prototype._compareValue = function (oldValue, newValue) {\n var compare = this._compare;\n return compare ? compare(oldValue, newValue) : oldValue === newValue;\n };\n /**\n * Run the change notification if the given values are different.\n */\n AttachedProperty.prototype._maybeNotify = function (owner, oldValue, newValue) {\n var changed = this._changed;\n if (changed && !this._compareValue(oldValue, newValue)) {\n changed(owner, oldValue, newValue);\n }\n };\n return AttachedProperty;\n}());\nexports.AttachedProperty = AttachedProperty;\n/**\n * The namespace for the `AttachedProperty` class statics.\n */\n(function (AttachedProperty) {\n /**\n * Clear the stored property data for the given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * This will clear all property values for the owner, but it will\n * **not** run the change notification for any of the properties.\n */\n function clearData(owner) {\n Private.ownerData.delete(owner);\n }\n AttachedProperty.clearData = clearData;\n})(AttachedProperty = exports.AttachedProperty || (exports.AttachedProperty = {}));\nexports.AttachedProperty = AttachedProperty;\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of property owner to property map.\n */\n Private.ownerData = new WeakMap();\n /**\n * A function which computes successive unique property ids.\n */\n Private.nextPID = (function () {\n var id = 0;\n return function () {\n var rand = Math.random();\n var stem = (\"\" + rand).slice(2);\n return \"pid-\" + stem + \"-\" + id++;\n };\n })();\n /**\n * Lookup the data map for the property owner.\n *\n * This will create the map if one does not already exist.\n */\n function ensureMap(owner) {\n var map = Private.ownerData.get(owner);\n if (map) {\n return map;\n }\n map = Object.create(null);\n Private.ownerData.set(owner, map);\n return map;\n }\n Private.ensureMap = ensureMap;\n})(Private || (Private = {}));\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","export {default as timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse} from \"./defaultLocale\";\nexport {default as timeFormatLocale} from \"./locale\";\nexport {default as isoFormat} from \"./isoFormat\";\nexport {default as isoParse} from \"./isoParse\";\n","\"use strict\";\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * A sizer object for use with the box engine layout functions.\r\n *\r\n * #### Notes\r\n * A box sizer holds the geometry information for an object along an\r\n * arbitrary layout orientation.\r\n *\r\n * For best performance, this class should be treated as a raw data\r\n * struct. It should not typically be subclassed.\r\n */\r\nvar BoxSizer = /** @class */ (function () {\r\n function BoxSizer() {\r\n /**\r\n * The preferred size for the sizer.\r\n *\r\n * #### Notes\r\n * The sizer will be given this initial size subject to its size\r\n * bounds. The sizer will not deviate from this size unless such\r\n * deviation is required to fit into the available layout space.\r\n *\r\n * There is no limit to this value, but it will be clamped to the\r\n * bounds defined by [[minSize]] and [[maxSize]].\r\n *\r\n * The default value is `0`.\r\n */\r\n this.sizeHint = 0;\r\n /**\r\n * The minimum size of the sizer.\r\n *\r\n * #### Notes\r\n * The sizer will never be sized less than this value, even if\r\n * it means the sizer will overflow the available layout space.\r\n *\r\n * It is assumed that this value lies in the range `[0, Infinity)`\r\n * and that it is `<=` to [[maxSize]]. Failure to adhere to this\r\n * constraint will yield undefined results.\r\n *\r\n * The default value is `0`.\r\n */\r\n this.minSize = 0;\r\n /**\r\n * The maximum size of the sizer.\r\n *\r\n * #### Notes\r\n * The sizer will never be sized greater than this value, even if\r\n * it means the sizer will underflow the available layout space.\r\n *\r\n * It is assumed that this value lies in the range `[0, Infinity]`\r\n * and that it is `>=` to [[minSize]]. Failure to adhere to this\r\n * constraint will yield undefined results.\r\n *\r\n * The default value is `Infinity`.\r\n */\r\n this.maxSize = Infinity;\r\n /**\r\n * The stretch factor for the sizer.\r\n *\r\n * #### Notes\r\n * This controls how much the sizer stretches relative to its sibling\r\n * sizers when layout space is distributed. A stretch factor of zero\r\n * is special and will cause the sizer to only be resized after all\r\n * other sizers with a stretch factor greater than zero have been\r\n * resized to their limits.\r\n *\r\n * It is assumed that this value is an integer that lies in the range\r\n * `[0, Infinity)`. Failure to adhere to this constraint will yield\r\n * undefined results.\r\n *\r\n * The default value is `1`.\r\n */\r\n this.stretch = 1;\r\n /**\r\n * The computed size of the sizer.\r\n *\r\n * #### Notes\r\n * This value is the output of a call to [[boxCalc]]. It represents\r\n * the computed size for the object along the layout orientation,\r\n * and will always lie in the range `[minSize, maxSize]`.\r\n *\r\n * This value is output only.\r\n *\r\n * Changing this value will have no effect.\r\n */\r\n this.size = 0;\r\n /**\r\n * An internal storage property for the layout algorithm.\r\n *\r\n * #### Notes\r\n * This value is used as temporary storage by the layout algorithm.\r\n *\r\n * Changing this value will have no effect.\r\n */\r\n this.done = false;\r\n }\r\n return BoxSizer;\r\n}());\r\nexports.BoxSizer = BoxSizer;\r\n/**\r\n * The namespace for the box engine layout functions.\r\n */\r\nvar BoxEngine;\r\n(function (BoxEngine) {\r\n /**\r\n * Calculate the optimal layout sizes for a sequence of box sizers.\r\n *\r\n * This distributes the available layout space among the box sizers\r\n * according to the following algorithm:\r\n *\r\n * 1. Initialize the sizers's size to its size hint and compute the\r\n * sums for each of size hint, min size, and max size.\r\n *\r\n * 2. If the total size hint equals the available space, return.\r\n *\r\n * 3. If the available space is less than the total min size, set all\r\n * sizers to their min size and return.\r\n *\r\n * 4. If the available space is greater than the total max size, set\r\n * all sizers to their max size and return.\r\n *\r\n * 5. If the layout space is less than the total size hint, distribute\r\n * the negative delta as follows:\r\n *\r\n * a. Shrink each sizer with a stretch factor greater than zero by\r\n * an amount proportional to the negative space and the sum of\r\n * stretch factors. If the sizer reaches its min size, remove\r\n * it and its stretch factor from the computation.\r\n *\r\n * b. If after adjusting all stretch sizers there remains negative\r\n * space, distribute the space equally among the sizers with a\r\n * stretch factor of zero. If a sizer reaches its min size,\r\n * remove it from the computation.\r\n *\r\n * 6. If the layout space is greater than the total size hint,\r\n * distribute the positive delta as follows:\r\n *\r\n * a. Expand each sizer with a stretch factor greater than zero by\r\n * an amount proportional to the postive space and the sum of\r\n * stretch factors. If the sizer reaches its max size, remove\r\n * it and its stretch factor from the computation.\r\n *\r\n * b. If after adjusting all stretch sizers there remains positive\r\n * space, distribute the space equally among the sizers with a\r\n * stretch factor of zero. If a sizer reaches its max size,\r\n * remove it from the computation.\r\n *\r\n * 7. return\r\n *\r\n * @param sizers - The sizers for a particular layout line.\r\n *\r\n * @param space - The available layout space for the sizers.\r\n *\r\n * @returns The delta between the provided available space and the\r\n * actual consumed space. This value will be zero if the sizers\r\n * can be adjusted to fit, negative if the available space is too\r\n * small, and positive if the available space is too large.\r\n *\r\n * #### Notes\r\n * The [[size]] of each sizer is updated with the computed size.\r\n *\r\n * This function can be called at any time to recompute the layout for\r\n * an existing sequence of sizers. The previously computed results will\r\n * have no effect on the new output. It is therefore not necessary to\r\n * create new sizer objects on each resize event.\r\n */\r\n function calc(sizers, space) {\r\n // Bail early if there is nothing to do.\r\n var count = sizers.length;\r\n if (count === 0) {\r\n return space;\r\n }\r\n // Setup the size and stretch counters.\r\n var totalMin = 0;\r\n var totalMax = 0;\r\n var totalSize = 0;\r\n var totalStretch = 0;\r\n var stretchCount = 0;\r\n // Setup the sizers and compute the totals.\r\n for (var i = 0; i < count; ++i) {\r\n var sizer = sizers[i];\r\n var min = sizer.minSize;\r\n var max = sizer.maxSize;\r\n var hint = sizer.sizeHint;\r\n sizer.done = false;\r\n sizer.size = Math.max(min, Math.min(hint, max));\r\n totalSize += sizer.size;\r\n totalMin += min;\r\n totalMax += max;\r\n if (sizer.stretch > 0) {\r\n totalStretch += sizer.stretch;\r\n stretchCount++;\r\n }\r\n }\r\n // If the space is equal to the total size, return early.\r\n if (space === totalSize) {\r\n return 0;\r\n }\r\n // If the space is less than the total min, minimize each sizer.\r\n if (space <= totalMin) {\r\n for (var i = 0; i < count; ++i) {\r\n var sizer = sizers[i];\r\n sizer.size = sizer.minSize;\r\n }\r\n return space - totalMin;\r\n }\r\n // If the space is greater than the total max, maximize each sizer.\r\n if (space >= totalMax) {\r\n for (var i = 0; i < count; ++i) {\r\n var sizer = sizers[i];\r\n sizer.size = sizer.maxSize;\r\n }\r\n return space - totalMax;\r\n }\r\n // The loops below perform sub-pixel precision sizing. A near zero\r\n // value is used for compares instead of zero to ensure that the\r\n // loop terminates when the subdivided space is reasonably small.\r\n var nearZero = 0.01;\r\n // A counter which is decremented each time a sizer is resized to\r\n // its limit. This ensures the loops terminate even if there is\r\n // space remaining to distribute.\r\n var notDoneCount = count;\r\n // Distribute negative delta space.\r\n if (space < totalSize) {\r\n // Shrink each stretchable sizer by an amount proportional to its\r\n // stretch factor. If a sizer reaches its min size it's marked as\r\n // done. The loop progresses in phases where each sizer is given\r\n // a chance to consume its fair share for the pass, regardless of\r\n // whether a sizer before it reached its limit. This continues\r\n // until the stretchable sizers or the free space is exhausted.\r\n var freeSpace = totalSize - space;\r\n while (stretchCount > 0 && freeSpace > nearZero) {\r\n var distSpace = freeSpace;\r\n var distStretch = totalStretch;\r\n for (var i = 0; i < count; ++i) {\r\n var sizer = sizers[i];\r\n if (sizer.done || sizer.stretch === 0) {\r\n continue;\r\n }\r\n var amt = sizer.stretch * distSpace / distStretch;\r\n if (sizer.size - amt <= sizer.minSize) {\r\n freeSpace -= sizer.size - sizer.minSize;\r\n totalStretch -= sizer.stretch;\r\n sizer.size = sizer.minSize;\r\n sizer.done = true;\r\n notDoneCount--;\r\n stretchCount--;\r\n }\r\n else {\r\n freeSpace -= amt;\r\n sizer.size -= amt;\r\n }\r\n }\r\n }\r\n // Distribute any remaining space evenly among the non-stretchable\r\n // sizers. This progresses in phases in the same manner as above.\r\n while (notDoneCount > 0 && freeSpace > nearZero) {\r\n var amt = freeSpace / notDoneCount;\r\n for (var i = 0; i < count; ++i) {\r\n var sizer = sizers[i];\r\n if (sizer.done) {\r\n continue;\r\n }\r\n if (sizer.size - amt <= sizer.minSize) {\r\n freeSpace -= sizer.size - sizer.minSize;\r\n sizer.size = sizer.minSize;\r\n sizer.done = true;\r\n notDoneCount--;\r\n }\r\n else {\r\n freeSpace -= amt;\r\n sizer.size -= amt;\r\n }\r\n }\r\n }\r\n }\r\n // Distribute positive delta space.\r\n else {\r\n // Expand each stretchable sizer by an amount proportional to its\r\n // stretch factor. If a sizer reaches its max size it's marked as\r\n // done. The loop progresses in phases where each sizer is given\r\n // a chance to consume its fair share for the pass, regardless of\r\n // whether a sizer before it reached its limit. This continues\r\n // until the stretchable sizers or the free space is exhausted.\r\n var freeSpace = space - totalSize;\r\n while (stretchCount > 0 && freeSpace > nearZero) {\r\n var distSpace = freeSpace;\r\n var distStretch = totalStretch;\r\n for (var i = 0; i < count; ++i) {\r\n var sizer = sizers[i];\r\n if (sizer.done || sizer.stretch === 0) {\r\n continue;\r\n }\r\n var amt = sizer.stretch * distSpace / distStretch;\r\n if (sizer.size + amt >= sizer.maxSize) {\r\n freeSpace -= sizer.maxSize - sizer.size;\r\n totalStretch -= sizer.stretch;\r\n sizer.size = sizer.maxSize;\r\n sizer.done = true;\r\n notDoneCount--;\r\n stretchCount--;\r\n }\r\n else {\r\n freeSpace -= amt;\r\n sizer.size += amt;\r\n }\r\n }\r\n }\r\n // Distribute any remaining space evenly among the non-stretchable\r\n // sizers. This progresses in phases in the same manner as above.\r\n while (notDoneCount > 0 && freeSpace > nearZero) {\r\n var amt = freeSpace / notDoneCount;\r\n for (var i = 0; i < count; ++i) {\r\n var sizer = sizers[i];\r\n if (sizer.done) {\r\n continue;\r\n }\r\n if (sizer.size + amt >= sizer.maxSize) {\r\n freeSpace -= sizer.maxSize - sizer.size;\r\n sizer.size = sizer.maxSize;\r\n sizer.done = true;\r\n notDoneCount--;\r\n }\r\n else {\r\n freeSpace -= amt;\r\n sizer.size += amt;\r\n }\r\n }\r\n }\r\n }\r\n // Indicate that the consumed space equals the available space.\r\n return 0;\r\n }\r\n BoxEngine.calc = calc;\r\n /**\r\n * Adjust a sizer by a delta and update its neighbors accordingly.\r\n *\r\n * @param sizers - The sizers which should be adjusted.\r\n *\r\n * @param index - The index of the sizer to grow.\r\n *\r\n * @param delta - The amount to adjust the sizer, positive or negative.\r\n *\r\n * #### Notes\r\n * This will adjust the indicated sizer by the specified amount, along\r\n * with the sizes of the appropriate neighbors, subject to the limits\r\n * specified by each of the sizers.\r\n *\r\n * This is useful when implementing box layouts where the boundaries\r\n * between the sizers are interactively adjustable by the user.\r\n */\r\n function adjust(sizers, index, delta) {\r\n // Bail early when there is nothing to do.\r\n if (sizers.length === 0 || delta === 0) {\r\n return;\r\n }\r\n // Dispatch to the proper implementation.\r\n if (delta > 0) {\r\n growSizer(sizers, index, delta);\r\n }\r\n else {\r\n shrinkSizer(sizers, index, -delta);\r\n }\r\n }\r\n BoxEngine.adjust = adjust;\r\n /**\r\n * Grow a sizer by a positive delta and adjust neighbors.\r\n */\r\n function growSizer(sizers, index, delta) {\r\n // Compute how much the items to the left can expand.\r\n var growLimit = 0;\r\n for (var i = 0; i <= index; ++i) {\r\n var sizer = sizers[i];\r\n growLimit += sizer.maxSize - sizer.size;\r\n }\r\n // Compute how much the items to the right can shrink.\r\n var shrinkLimit = 0;\r\n for (var i = index + 1, n = sizers.length; i < n; ++i) {\r\n var sizer = sizers[i];\r\n shrinkLimit += sizer.size - sizer.minSize;\r\n }\r\n // Clamp the delta adjustment to the limits.\r\n delta = Math.min(delta, growLimit, shrinkLimit);\r\n // Grow the sizers to the left by the delta.\r\n var grow = delta;\r\n for (var i = index; i >= 0 && grow > 0; --i) {\r\n var sizer = sizers[i];\r\n var limit = sizer.maxSize - sizer.size;\r\n if (limit >= grow) {\r\n sizer.sizeHint = sizer.size + grow;\r\n grow = 0;\r\n }\r\n else {\r\n sizer.sizeHint = sizer.size + limit;\r\n grow -= limit;\r\n }\r\n }\r\n // Shrink the sizers to the right by the delta.\r\n var shrink = delta;\r\n for (var i = index + 1, n = sizers.length; i < n && shrink > 0; ++i) {\r\n var sizer = sizers[i];\r\n var limit = sizer.size - sizer.minSize;\r\n if (limit >= shrink) {\r\n sizer.sizeHint = sizer.size - shrink;\r\n shrink = 0;\r\n }\r\n else {\r\n sizer.sizeHint = sizer.size - limit;\r\n shrink -= limit;\r\n }\r\n }\r\n }\r\n /**\r\n * Shrink a sizer by a positive delta and adjust neighbors.\r\n */\r\n function shrinkSizer(sizers, index, delta) {\r\n // Compute how much the items to the right can expand.\r\n var growLimit = 0;\r\n for (var i = index + 1, n = sizers.length; i < n; ++i) {\r\n var sizer = sizers[i];\r\n growLimit += sizer.maxSize - sizer.size;\r\n }\r\n // Compute how much the items to the left can shrink.\r\n var shrinkLimit = 0;\r\n for (var i = 0; i <= index; ++i) {\r\n var sizer = sizers[i];\r\n shrinkLimit += sizer.size - sizer.minSize;\r\n }\r\n // Clamp the delta adjustment to the limits.\r\n delta = Math.min(delta, growLimit, shrinkLimit);\r\n // Grow the sizers to the right by the delta.\r\n var grow = delta;\r\n for (var i = index + 1, n = sizers.length; i < n && grow > 0; ++i) {\r\n var sizer = sizers[i];\r\n var limit = sizer.maxSize - sizer.size;\r\n if (limit >= grow) {\r\n sizer.sizeHint = sizer.size + grow;\r\n grow = 0;\r\n }\r\n else {\r\n sizer.sizeHint = sizer.size + limit;\r\n grow -= limit;\r\n }\r\n }\r\n // Shrink the sizers to the left by the delta.\r\n var shrink = delta;\r\n for (var i = index; i >= 0 && shrink > 0; --i) {\r\n var sizer = sizers[i];\r\n var limit = sizer.size - sizer.minSize;\r\n if (limit >= shrink) {\r\n sizer.sizeHint = sizer.size - shrink;\r\n shrink = 0;\r\n }\r\n else {\r\n sizer.sizeHint = sizer.size - limit;\r\n shrink -= limit;\r\n }\r\n }\r\n }\r\n})(BoxEngine = exports.BoxEngine || (exports.BoxEngine = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar layout_1 = require(\"./layout\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A concrete layout implementation suitable for many use cases.\r\n *\r\n * #### Notes\r\n * This class is suitable as a base class for implementing a variety of\r\n * layouts, but can also be used directly with standard CSS to layout a\r\n * collection of widgets.\r\n */\r\nvar PanelLayout = /** @class */ (function (_super) {\r\n __extends(PanelLayout, _super);\r\n function PanelLayout() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this._widgets = [];\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the layout.\r\n *\r\n * #### Notes\r\n * This will clear and dispose all widgets in the layout.\r\n *\r\n * All reimplementations should call the superclass method.\r\n *\r\n * This method is called automatically when the parent is disposed.\r\n */\r\n PanelLayout.prototype.dispose = function () {\r\n while (this._widgets.length > 0) {\r\n this._widgets.pop().dispose();\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(PanelLayout.prototype, \"widgets\", {\r\n /**\r\n * A read-only array of the widgets in the layout.\r\n */\r\n get: function () {\r\n return this._widgets;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Create an iterator over the widgets in the layout.\r\n *\r\n * @returns A new iterator over the widgets in the layout.\r\n */\r\n PanelLayout.prototype.iter = function () {\r\n return algorithm_1.iter(this._widgets);\r\n };\r\n /**\r\n * Add a widget to the end of the layout.\r\n *\r\n * @param widget - The widget to add to the layout.\r\n *\r\n * #### Notes\r\n * If the widget is already contained in the layout, it will be moved.\r\n */\r\n PanelLayout.prototype.addWidget = function (widget) {\r\n this.insertWidget(this._widgets.length, widget);\r\n };\r\n /**\r\n * Insert a widget into the layout at the specified index.\r\n *\r\n * @param index - The index at which to insert the widget.\r\n *\r\n * @param widget - The widget to insert into the layout.\r\n *\r\n * #### Notes\r\n * The index will be clamped to the bounds of the widgets.\r\n *\r\n * If the widget is already added to the layout, it will be moved.\r\n *\r\n * #### Undefined Behavior\r\n * An `index` which is non-integral.\r\n */\r\n PanelLayout.prototype.insertWidget = function (index, widget) {\r\n // Remove the widget from its current parent. This is a no-op\r\n // if the widget's parent is already the layout parent widget.\r\n widget.parent = this.parent;\r\n // Look up the current index of the widget.\r\n var i = this._widgets.indexOf(widget);\r\n // Clamp the insert index to the array bounds.\r\n var j = Math.max(0, Math.min(index, this._widgets.length));\r\n // If the widget is not in the array, insert it.\r\n if (i === -1) {\r\n // Insert the widget into the array.\r\n algorithm_1.ArrayExt.insert(this._widgets, j, widget);\r\n // If the layout is parented, attach the widget to the DOM.\r\n if (this.parent) {\r\n this.attachWidget(j, widget);\r\n }\r\n // There is nothing more to do.\r\n return;\r\n }\r\n // Otherwise, the widget exists in the array and should be moved.\r\n // Adjust the index if the location is at the end of the array.\r\n if (j === this._widgets.length) {\r\n j--;\r\n }\r\n // Bail if there is no effective move.\r\n if (i === j) {\r\n return;\r\n }\r\n // Move the widget to the new location.\r\n algorithm_1.ArrayExt.move(this._widgets, i, j);\r\n // If the layout is parented, move the widget in the DOM.\r\n if (this.parent) {\r\n this.moveWidget(i, j, widget);\r\n }\r\n };\r\n /**\r\n * Remove a widget from the layout.\r\n *\r\n * @param widget - The widget to remove from the layout.\r\n *\r\n * #### Notes\r\n * A widget is automatically removed from the layout when its `parent`\r\n * is set to `null`. This method should only be invoked directly when\r\n * removing a widget from a layout which has yet to be installed on a\r\n * parent widget.\r\n *\r\n * This method does *not* modify the widget's `parent`.\r\n */\r\n PanelLayout.prototype.removeWidget = function (widget) {\r\n this.removeWidgetAt(this._widgets.indexOf(widget));\r\n };\r\n /**\r\n * Remove the widget at a given index from the layout.\r\n *\r\n * @param index - The index of the widget to remove.\r\n *\r\n * #### Notes\r\n * A widget is automatically removed from the layout when its `parent`\r\n * is set to `null`. This method should only be invoked directly when\r\n * removing a widget from a layout which has yet to be installed on a\r\n * parent widget.\r\n *\r\n * This method does *not* modify the widget's `parent`.\r\n *\r\n * #### Undefined Behavior\r\n * An `index` which is non-integral.\r\n */\r\n PanelLayout.prototype.removeWidgetAt = function (index) {\r\n // Remove the widget from the array.\r\n var widget = algorithm_1.ArrayExt.removeAt(this._widgets, index);\r\n // If the layout is parented, detach the widget from the DOM.\r\n if (widget && this.parent) {\r\n this.detachWidget(index, widget);\r\n }\r\n };\r\n /**\r\n * Perform layout initialization which requires the parent widget.\r\n */\r\n PanelLayout.prototype.init = function () {\r\n var _this = this;\r\n _super.prototype.init.call(this);\r\n algorithm_1.each(this, function (widget, index) {\r\n _this.attachWidget(index, widget);\r\n });\r\n };\r\n /**\r\n * Attach a widget to the parent's DOM node.\r\n *\r\n * @param index - The current index of the widget in the layout.\r\n *\r\n * @param widget - The widget to attach to the parent.\r\n *\r\n * #### Notes\r\n * This method is called automatically by the panel layout at the\r\n * appropriate time. It should not be called directly by user code.\r\n *\r\n * The default implementation adds the widgets's node to the parent's\r\n * node at the proper location, and sends the appropriate attach\r\n * messages to the widget if the parent is attached to the DOM.\r\n *\r\n * Subclasses may reimplement this method to control how the widget's\r\n * node is added to the parent's node.\r\n */\r\n PanelLayout.prototype.attachWidget = function (index, widget) {\r\n // Look up the next sibling reference node.\r\n var ref = this.parent.node.children[index];\r\n // Send a `'before-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeAttach);\r\n }\r\n // Insert the widget's node before the sibling.\r\n this.parent.node.insertBefore(widget.node, ref);\r\n // Send an `'after-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterAttach);\r\n }\r\n };\r\n /**\r\n * Move a widget in the parent's DOM node.\r\n *\r\n * @param fromIndex - The previous index of the widget in the layout.\r\n *\r\n * @param toIndex - The current index of the widget in the layout.\r\n *\r\n * @param widget - The widget to move in the parent.\r\n *\r\n * #### Notes\r\n * This method is called automatically by the panel layout at the\r\n * appropriate time. It should not be called directly by user code.\r\n *\r\n * The default implementation moves the widget's node to the proper\r\n * location in the parent's node and sends the appropriate attach and\r\n * detach messages to the widget if the parent is attached to the DOM.\r\n *\r\n * Subclasses may reimplement this method to control how the widget's\r\n * node is moved in the parent's node.\r\n */\r\n PanelLayout.prototype.moveWidget = function (fromIndex, toIndex, widget) {\r\n // Send a `'before-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeDetach);\r\n }\r\n // Remove the widget's node from the parent.\r\n this.parent.node.removeChild(widget.node);\r\n // Send an `'after-detach'` and message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterDetach);\r\n }\r\n // Look up the next sibling reference node.\r\n var ref = this.parent.node.children[toIndex];\r\n // Send a `'before-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeAttach);\r\n }\r\n // Insert the widget's node before the sibling.\r\n this.parent.node.insertBefore(widget.node, ref);\r\n // Send an `'after-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterAttach);\r\n }\r\n };\r\n /**\r\n * Detach a widget from the parent's DOM node.\r\n *\r\n * @param index - The previous index of the widget in the layout.\r\n *\r\n * @param widget - The widget to detach from the parent.\r\n *\r\n * #### Notes\r\n * This method is called automatically by the panel layout at the\r\n * appropriate time. It should not be called directly by user code.\r\n *\r\n * The default implementation removes the widget's node from the\r\n * parent's node, and sends the appropriate detach messages to the\r\n * widget if the parent is attached to the DOM.\r\n *\r\n * Subclasses may reimplement this method to control how the widget's\r\n * node is removed from the parent's node.\r\n */\r\n PanelLayout.prototype.detachWidget = function (index, widget) {\r\n // Send a `'before-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeDetach);\r\n }\r\n // Remove the widget's node from the parent.\r\n this.parent.node.removeChild(widget.node);\r\n // Send an `'after-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterDetach);\r\n }\r\n };\r\n return PanelLayout;\r\n}(layout_1.Layout));\r\nexports.PanelLayout = PanelLayout;\r\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// const d3 =Object.assign({}, require(\"d3-selection\"));\nconst Interaction_1 = require(\"./Interaction\");\nconst convert_dates = require('./utils').convert_dates;\nconst base_1 = require(\"@jupyter-widgets/base\");\nclass BaseSelector extends Interaction_1.Interaction {\n initialize(parameters) {\n this.setElement(document.createElementNS(d3.namespaces.svg, \"g\"));\n this.d3el = d3.select(this.el);\n // The following line is a workaround to avoid calling the initialize\n // method from Interaction. Indeed this last one wraps the area responsible\n // for capturing mouse events in a rect element whose width and height are\n // 0. The whole hierarchy of Interaction should be refactored to fix this.\n base_1.WidgetView.prototype.initialize.call(this, parameters);\n //super.initialize.apply(this, arguments);\n }\n render() {\n this.parent = this.options.parent;\n this.width = this.parent.width - this.parent.margin.left - this.parent.margin.right;\n this.height = this.parent.height - this.parent.margin.top - this.parent.margin.bottom;\n this.mark_views_promise = this.populate_mark_views();\n }\n create_listeners() {\n this.parent.on(\"margin_updated\", this.relayout, this);\n this.listenTo(this.model, \"change:selected\", this.selected_changed);\n this.listenTo(this.model, \"change:marks\", this.marks_changed);\n this.listenTo(this.model, \"msg:custom\", this.handle_custom_messages);\n }\n relayout() {\n this.height = this.parent.height - this.parent.margin.top - this.parent.margin.bottom;\n this.width = this.parent.width - this.parent.margin.left - this.parent.margin.right;\n }\n async populate_mark_views() {\n const fig = this.parent;\n const mark_ids = this.model.get(\"marks\").map(m => m.model_id);\n const views = await Promise.all(fig.mark_views.views);\n const fig_mark_ids = fig.mark_views._models.map(m => m.model_id);\n const mark_indices = mark_ids.map(mid => fig_mark_ids.indexOf(mid));\n // return the views, based on the assumption that fig.mark_views is an\n // ordered list\n this.mark_views = mark_indices.map(elem => views[elem]);\n }\n marks_changed() {\n this.populate_mark_views().then(() => this.selected_changed());\n }\n handle_custom_messages(msg) {\n if (msg.type === \"reset\") {\n this.reset();\n }\n }\n set_selected(name, value) {\n this.model.set(name, convert_dates(value));\n }\n}\nexports.BaseSelector = BaseSelector;\nclass BaseXSelector extends BaseSelector {\n create_scales() {\n if (this.scale) {\n this.scale.remove();\n }\n if (this.model.get(\"scale\")) {\n const that = this;\n return this.create_child_view(this.model.get(\"scale\")).then(function (view) {\n that.scale = view;\n // The argument is to suppress the update to gui\n that.update_scale_domain(true);\n that.set_range([that.scale]);\n that.scale.on(\"domain_changed\", that.update_scale_domain, that);\n return view;\n });\n }\n }\n update_scale_domain(ignore_gui_update = false) {\n // When the domain of the scale is updated, the domain of the scale\n // for the selector must be expanded to account for the padding.\n const xy = (this.model.get(\"orientation\") == \"vertical\") ? \"y\" : \"x\";\n const initial_range = this.parent.padded_range(xy, this.scale.model);\n const target_range = this.parent.range(xy);\n this.scale.expand_domain(initial_range, target_range);\n }\n set_range(array) {\n const xy = (this.model.get(\"orientation\") == \"vertical\") ? \"y\" : \"x\";\n for (let iter = 0; iter < array.length; iter++) {\n array[iter].set_range(this.parent.range(xy));\n }\n }\n}\nexports.BaseXSelector = BaseXSelector;\nclass BaseXYSelector extends BaseSelector {\n create_scales() {\n const that = this;\n if (this.x_scale) {\n this.x_scale.remove();\n }\n if (this.y_scale) {\n this.y_scale.remove();\n }\n const scale_promises = [];\n if (this.model.get(\"x_scale\")) {\n scale_promises.push(this.create_child_view(this.model.get(\"x_scale\")).then(function (view) {\n that.x_scale = view;\n that.update_xscale_domain();\n that.set_x_range([that.x_scale]);\n that.x_scale.on(\"domain_changed\", that.update_xscale_domain, that);\n return view;\n }));\n }\n if (this.model.get(\"y_scale\")) {\n scale_promises.push(this.create_child_view(this.model.get(\"y_scale\")).then(function (view) {\n that.y_scale = view;\n that.update_yscale_domain();\n that.set_y_range([that.y_scale]);\n that.y_scale.on(\"domain_changed\", that.update_yscale_domain, that);\n return view;\n }));\n }\n return Promise.all(scale_promises);\n }\n set_x_range(array) {\n for (let iter = 0; iter < array.length; iter++) {\n array[iter].set_range(this.parent.range(\"x\"));\n }\n }\n set_y_range(array) {\n for (var iter = 0; iter < array.length; iter++) {\n array[iter].set_range(this.parent.range(\"y\"));\n }\n }\n update_xscale_domain() {\n // When the domain of the scale is updated, the domain of the scale\n // for the selector must be expanded to account for the padding.\n const initial_range = this.parent.padded_range(\"x\", this.x_scale.model);\n const target_range = this.parent.range(\"x\");\n this.x_scale.expand_domain(initial_range, target_range);\n }\n update_yscale_domain() {\n // When the domain of the scale is updated, the domain of the scale\n // for the selector must be expanded to account for the padding.\n const initial_range = this.parent.padded_range(\"y\", this.y_scale.model);\n const target_range = this.parent.range(\"y\");\n this.y_scale.expand_domain(initial_range, target_range);\n }\n}\nexports.BaseXYSelector = BaseXYSelector;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2VsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6Qix3REFBd0Q7QUFDeEQsK0NBQTRDO0FBQzVDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFDdkQsZ0RBQW1EO0FBRW5ELE1BQXNCLFlBQWEsU0FBUSx5QkFBVztJQUVsRCxVQUFVLENBQUMsVUFBVTtRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLHFFQUFxRTtRQUNyRSwyRUFBMkU7UUFDM0UsMEVBQTBFO1FBQzFFLDBFQUEwRTtRQUMxRSxpQkFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCwwQ0FBMEM7SUFDOUMsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNwRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcs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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nclass Scale extends widgets.WidgetView {\n render() {\n this.offset = 0;\n }\n create_event_listeners() {\n this.listenTo(this.model, \"domain_changed\", this.model_domain_changed);\n this.listenTo(this.model, \"highlight_axis\", this.highlight_axis);\n this.listenTo(this.model, \"unhighlight_axis\", this.unhighlight_axis);\n }\n set_range(range, padding) {\n this.scale.range(range);\n }\n compute_and_set_domain(array, id) {\n this.model.compute_and_set_domain(array, id);\n }\n set_domain(array, id) {\n this.model.set_domain(array, id);\n }\n model_domain_changed() {\n this.scale.domain(this.model.domain);\n this.trigger(\"domain_changed\");\n }\n highlight_axis() {\n this.trigger(\"highlight_axis\");\n }\n unhighlight_axis() {\n this.trigger(\"unhighlight_axis\");\n }\n expand_domain(old_range, new_range) {\n // Base class function. No implementation.\n // Implementation is particular to the child class\n // if you have a current range and then a new range and want to\n // expand the domain to expand to the new range but keep it\n // consistent with the previous one, this is the function you use.\n }\n}\nexports.Scale = Scale;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILCtEQUFpRDtBQUdqRCxNQUFhLEtBQU0sU0FBUSxPQUFPLENBQUMsVUFBVTtJQUV6QyxNQUFNO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTztRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBUyxFQUFFLFNBQVM7UUFDOUIsMENBQTBDO1FBQzFDLGtEQUFrRDtRQUNsRCwrREFBK0Q7UUFDL0QsMkRBQTJEO1FBQzNELGtFQUFrRTtJQUN0RSxDQUFDO0NBUUo7QUFuREQsc0JBbURDIn0=","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar panellayout_1 = require(\"./panellayout\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A simple and convenient panel widget class.\r\n *\r\n * #### Notes\r\n * This class is suitable as a base class for implementing a variety of\r\n * convenience panel widgets, but can also be used directly with CSS to\r\n * arrange a collection of widgets.\r\n *\r\n * This class provides a convenience wrapper around a [[PanelLayout]].\r\n */\r\nvar Panel = /** @class */ (function (_super) {\r\n __extends(Panel, _super);\r\n /**\r\n * Construct a new panel.\r\n *\r\n * @param options - The options for initializing the panel.\r\n */\r\n function Panel(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this) || this;\r\n _this.addClass('p-Panel');\r\n _this.layout = Private.createLayout(options);\r\n return _this;\r\n }\r\n Object.defineProperty(Panel.prototype, \"widgets\", {\r\n /**\r\n * A read-only array of the widgets in the panel.\r\n */\r\n get: function () {\r\n return this.layout.widgets;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Add a widget to the end of the panel.\r\n *\r\n * @param widget - The widget to add to the panel.\r\n *\r\n * #### Notes\r\n * If the widget is already contained in the panel, it will be moved.\r\n */\r\n Panel.prototype.addWidget = function (widget) {\r\n this.layout.addWidget(widget);\r\n };\r\n /**\r\n * Insert a widget at the specified index.\r\n *\r\n * @param index - The index at which to insert the widget.\r\n *\r\n * @param widget - The widget to insert into to the panel.\r\n *\r\n * #### Notes\r\n * If the widget is already contained in the panel, it will be moved.\r\n */\r\n Panel.prototype.insertWidget = function (index, widget) {\r\n this.layout.insertWidget(index, widget);\r\n };\r\n return Panel;\r\n}(widget_1.Widget));\r\nexports.Panel = Panel;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * Create a panel layout for the given panel options.\r\n */\r\n function createLayout(options) {\r\n return options.layout || new panellayout_1.PanelLayout();\r\n }\r\n Private.createLayout = createLayout;\r\n})(Private || (Private = {}));\r\n","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n__export(require(\"./json\"));\n__export(require(\"./mime\"));\n__export(require(\"./promise\"));\n__export(require(\"./random\"));\n__export(require(\"./token\"));\n__export(require(\"./uuid\"));\n","'use strict';\n\nif (!process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar algorithm_1 = require(\"@phosphor/algorithm\");\n/**\n * A virtual node which represents plain text content.\n *\n * #### Notes\n * User code will not typically create a `VirtualText` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nvar VirtualText = /** @class */ (function () {\n /**\n * Construct a new virtual text node.\n *\n * @param content - The text content for the node.\n */\n function VirtualText(content) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'text';\n this.content = content;\n }\n return VirtualText;\n}());\nexports.VirtualText = VirtualText;\n/**\n * A virtual node which represents an HTML element.\n *\n * #### Notes\n * User code will not typically create a `VirtualElement` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nvar VirtualElement = /** @class */ (function () {\n /**\n * Construct a new virtual element node.\n *\n * @param tag - The element tag name.\n *\n * @param attrs - The element attributes.\n *\n * @param children - The element children.\n */\n function VirtualElement(tag, attrs, children) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'element';\n this.tag = tag;\n this.attrs = attrs;\n this.children = children;\n }\n return VirtualElement;\n}());\nexports.VirtualElement = VirtualElement;\nfunction h(tag) {\n var attrs = {};\n var children = [];\n for (var i = 1, n = arguments.length; i < n; ++i) {\n var arg = arguments[i];\n if (typeof arg === 'string') {\n children.push(new VirtualText(arg));\n }\n else if (arg instanceof VirtualText) {\n children.push(arg);\n }\n else if (arg instanceof VirtualElement) {\n children.push(arg);\n }\n else if (arg instanceof Array) {\n extend(children, arg);\n }\n else if (i === 1 && arg && typeof arg === 'object') {\n attrs = arg;\n }\n }\n return new VirtualElement(tag, attrs, children);\n function extend(array, values) {\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var child = values_1[_i];\n if (typeof child === 'string') {\n array.push(new VirtualText(child));\n }\n else if (child instanceof VirtualText) {\n array.push(child);\n }\n else if (child instanceof VirtualElement) {\n array.push(child);\n }\n }\n }\n}\nexports.h = h;\n/**\n * The namespace for the `h` function statics.\n */\n(function (h) {\n h.a = h.bind(undefined, 'a');\n h.abbr = h.bind(undefined, 'abbr');\n h.address = h.bind(undefined, 'address');\n h.area = h.bind(undefined, 'area');\n h.article = h.bind(undefined, 'article');\n h.aside = h.bind(undefined, 'aside');\n h.audio = h.bind(undefined, 'audio');\n h.b = h.bind(undefined, 'b');\n h.bdi = h.bind(undefined, 'bdi');\n h.bdo = h.bind(undefined, 'bdo');\n h.blockquote = h.bind(undefined, 'blockquote');\n h.br = h.bind(undefined, 'br');\n h.button = h.bind(undefined, 'button');\n h.canvas = h.bind(undefined, 'canvas');\n h.caption = h.bind(undefined, 'caption');\n h.cite = h.bind(undefined, 'cite');\n h.code = h.bind(undefined, 'code');\n h.col = h.bind(undefined, 'col');\n h.colgroup = h.bind(undefined, 'colgroup');\n h.data = h.bind(undefined, 'data');\n h.datalist = h.bind(undefined, 'datalist');\n h.dd = h.bind(undefined, 'dd');\n h.del = h.bind(undefined, 'del');\n h.dfn = h.bind(undefined, 'dfn');\n h.div = h.bind(undefined, 'div');\n h.dl = h.bind(undefined, 'dl');\n h.dt = h.bind(undefined, 'dt');\n h.em = h.bind(undefined, 'em');\n h.embed = h.bind(undefined, 'embed');\n h.fieldset = h.bind(undefined, 'fieldset');\n h.figcaption = h.bind(undefined, 'figcaption');\n h.figure = h.bind(undefined, 'figure');\n h.footer = h.bind(undefined, 'footer');\n h.form = h.bind(undefined, 'form');\n h.h1 = h.bind(undefined, 'h1');\n h.h2 = h.bind(undefined, 'h2');\n h.h3 = h.bind(undefined, 'h3');\n h.h4 = h.bind(undefined, 'h4');\n h.h5 = h.bind(undefined, 'h5');\n h.h6 = h.bind(undefined, 'h6');\n h.header = h.bind(undefined, 'header');\n h.hr = h.bind(undefined, 'hr');\n h.i = h.bind(undefined, 'i');\n h.iframe = h.bind(undefined, 'iframe');\n h.img = h.bind(undefined, 'img');\n h.input = h.bind(undefined, 'input');\n h.ins = h.bind(undefined, 'ins');\n h.kbd = h.bind(undefined, 'kbd');\n h.label = h.bind(undefined, 'label');\n h.legend = h.bind(undefined, 'legend');\n h.li = h.bind(undefined, 'li');\n h.main = h.bind(undefined, 'main');\n h.map = h.bind(undefined, 'map');\n h.mark = h.bind(undefined, 'mark');\n h.meter = h.bind(undefined, 'meter');\n h.nav = h.bind(undefined, 'nav');\n h.noscript = h.bind(undefined, 'noscript');\n h.object = h.bind(undefined, 'object');\n h.ol = h.bind(undefined, 'ol');\n h.optgroup = h.bind(undefined, 'optgroup');\n h.option = h.bind(undefined, 'option');\n h.output = h.bind(undefined, 'output');\n h.p = h.bind(undefined, 'p');\n h.param = h.bind(undefined, 'param');\n h.pre = h.bind(undefined, 'pre');\n h.progress = h.bind(undefined, 'progress');\n h.q = h.bind(undefined, 'q');\n h.rp = h.bind(undefined, 'rp');\n h.rt = h.bind(undefined, 'rt');\n h.ruby = h.bind(undefined, 'ruby');\n h.s = h.bind(undefined, 's');\n h.samp = h.bind(undefined, 'samp');\n h.section = h.bind(undefined, 'section');\n h.select = h.bind(undefined, 'select');\n h.small = h.bind(undefined, 'small');\n h.source = h.bind(undefined, 'source');\n h.span = h.bind(undefined, 'span');\n h.strong = h.bind(undefined, 'strong');\n h.sub = h.bind(undefined, 'sub');\n h.summary = h.bind(undefined, 'summary');\n h.sup = h.bind(undefined, 'sup');\n h.table = h.bind(undefined, 'table');\n h.tbody = h.bind(undefined, 'tbody');\n h.td = h.bind(undefined, 'td');\n h.textarea = h.bind(undefined, 'textarea');\n h.tfoot = h.bind(undefined, 'tfoot');\n h.th = h.bind(undefined, 'th');\n h.thead = h.bind(undefined, 'thead');\n h.time = h.bind(undefined, 'time');\n h.title = h.bind(undefined, 'title');\n h.tr = h.bind(undefined, 'tr');\n h.track = h.bind(undefined, 'track');\n h.u = h.bind(undefined, 'u');\n h.ul = h.bind(undefined, 'ul');\n h.var_ = h.bind(undefined, 'var');\n h.video = h.bind(undefined, 'video');\n h.wbr = h.bind(undefined, 'wbr');\n})(h = exports.h || (exports.h = {}));\n/**\n * The namespace for the virtual DOM rendering functions.\n */\nvar VirtualDOM;\n(function (VirtualDOM) {\n /**\n * Create a real DOM element from a virtual element node.\n *\n * @param node - The virtual element node to realize.\n *\n * @returns A new DOM element for the given virtual element node.\n *\n * #### Notes\n * This creates a brand new *real* DOM element with a structure which\n * matches the given virtual DOM node.\n *\n * If virtual diffing is desired, use the `render` function instead.\n */\n function realize(node) {\n return Private.createDOMNode(node);\n }\n VirtualDOM.realize = realize;\n /**\n * Render virtual DOM content into a host element.\n *\n * @param content - The virtual DOM content to render.\n *\n * @param host - The host element for the rendered content.\n *\n * #### Notes\n * This renders the delta from the previous rendering. It assumes that\n * the content of the host element is not manipulated by external code.\n *\n * Providing `null` content will clear the rendering.\n *\n * Externally modifying the provided content or the host element will\n * result in undefined rendering behavior.\n */\n function render(content, host) {\n var oldContent = Private.hostMap.get(host) || [];\n var newContent = Private.asContentArray(content);\n Private.hostMap.set(host, newContent);\n Private.updateContent(host, oldContent, newContent);\n }\n VirtualDOM.render = render;\n})(VirtualDOM = exports.VirtualDOM || (exports.VirtualDOM = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of host element to virtual DOM content.\n */\n Private.hostMap = new WeakMap();\n /**\n * Cast a content value to a content array.\n */\n function asContentArray(value) {\n if (!value) {\n return [];\n }\n if (value instanceof Array) {\n return value;\n }\n return [value];\n }\n Private.asContentArray = asContentArray;\n function createDOMNode(node) {\n // Create a text node for a virtual text node.\n if (node.type === 'text') {\n return document.createTextNode(node.content);\n }\n // Create the HTML element with the specified tag.\n var element = document.createElement(node.tag);\n // Add the attributes for the new element.\n addAttrs(element, node.attrs);\n // Recursively populate the element with child content.\n for (var i = 0, n = node.children.length; i < n; ++i) {\n element.appendChild(createDOMNode(node.children[i]));\n }\n // Return the populated element.\n return element;\n }\n Private.createDOMNode = createDOMNode;\n /**\n * Update a host element with the delta of the virtual content.\n *\n * This is the core \"diff\" algorithm. There is no explicit \"patch\"\n * phase. The host is patched at each step as the diff progresses.\n */\n function updateContent(host, oldContent, newContent) {\n // Bail early if the content is identical.\n if (oldContent === newContent) {\n return;\n }\n // Collect the old keyed elems into a mapping.\n var oldKeyed = collectKeys(host, oldContent);\n // Create a copy of the old content which can be modified in-place.\n var oldCopy = oldContent.slice();\n // Update the host with the new content. The diff always proceeds\n // forward and never modifies a previously visited index. The old\n // copy array is modified in-place to reflect the changes made to\n // the host children. This causes the stale nodes to be pushed to\n // the end of the host node and removed at the end of the loop.\n var currElem = host.firstChild;\n var newCount = newContent.length;\n for (var i = 0; i < newCount; ++i) {\n // If the old content is exhausted, create a new node.\n if (i >= oldCopy.length) {\n host.appendChild(createDOMNode(newContent[i]));\n continue;\n }\n // Lookup the old and new virtual nodes.\n var oldVNode = oldCopy[i];\n var newVNode = newContent[i];\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // Handle the simplest case of in-place text update first.\n if (oldVNode.type === 'text' && newVNode.type === 'text') {\n currElem.textContent = newVNode.content;\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old or new node is a text node, the other node is now\n // known to be an element node, so create and insert a new node.\n if (oldVNode.type === 'text' || newVNode.type === 'text') {\n algorithm_1.ArrayExt.insert(oldCopy, i, newVNode);\n host.insertBefore(createDOMNode(newVNode), currElem);\n continue;\n }\n // At this point, both nodes are known to be element nodes.\n // If the new elem is keyed, move an old keyed elem to the proper\n // location before proceeding with the diff. The search can start\n // at the current index, since the unmatched old keyed elems are\n // pushed forward in the old copy array.\n var newKey = newVNode.attrs.key;\n if (newKey && newKey in oldKeyed) {\n var pair = oldKeyed[newKey];\n if (pair.vNode !== oldVNode) {\n algorithm_1.ArrayExt.move(oldCopy, oldCopy.indexOf(pair.vNode, i + 1), i);\n host.insertBefore(pair.element, currElem);\n oldVNode = pair.vNode;\n currElem = pair.element;\n }\n }\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old elem is keyed and does not match the new elem key,\n // create a new node. This is necessary since the old keyed elem\n // may be matched at a later point in the diff.\n var oldKey = oldVNode.attrs.key;\n if (oldKey && oldKey !== newKey) {\n algorithm_1.ArrayExt.insert(oldCopy, i, newVNode);\n host.insertBefore(createDOMNode(newVNode), currElem);\n continue;\n }\n // If the tags are different, create a new node.\n if (oldVNode.tag !== newVNode.tag) {\n algorithm_1.ArrayExt.insert(oldCopy, i, newVNode);\n host.insertBefore(createDOMNode(newVNode), currElem);\n continue;\n }\n // At this point, the element can be updated in-place.\n // Update the element attributes.\n updateAttrs(currElem, oldVNode.attrs, newVNode.attrs);\n // Update the element content.\n updateContent(currElem, oldVNode.children, newVNode.children);\n // Step to the next sibling element.\n currElem = currElem.nextSibling;\n }\n // Dispose of the old nodes pushed to the end of the host.\n for (var i = oldCopy.length - newCount; i > 0; --i) {\n host.removeChild(host.lastChild);\n }\n }\n Private.updateContent = updateContent;\n /**\n * A set of special-cased attribute names.\n */\n var specialAttrs = {\n 'key': true,\n 'className': true,\n 'htmlFor': true,\n 'dataset': true,\n 'style': true,\n };\n /**\n * Add element attributes to a newly created HTML element.\n */\n function addAttrs(element, attrs) {\n // Add the inline event listeners and node attributes.\n for (var name_1 in attrs) {\n if (name_1 in specialAttrs) {\n continue;\n }\n if (name_1.substr(0, 2) === 'on') {\n element[name_1] = attrs[name_1];\n }\n else {\n element.setAttribute(name_1, attrs[name_1]);\n }\n }\n // Add the element `class` attribute.\n if (attrs.className !== undefined) {\n element.setAttribute('class', attrs.className);\n }\n // Add the element `for` attribute.\n if (attrs.htmlFor !== undefined) {\n element.setAttribute('for', attrs.htmlFor);\n }\n // Add the dataset values.\n if (attrs.dataset) {\n addDataset(element, attrs.dataset);\n }\n // Add the inline styles.\n if (attrs.style) {\n addStyle(element, attrs.style);\n }\n }\n /**\n * Update the element attributes of an HTML element.\n */\n function updateAttrs(element, oldAttrs, newAttrs) {\n // Do nothing if the attrs are the same object.\n if (oldAttrs === newAttrs) {\n return;\n }\n // Setup the strongly typed loop variable.\n var name;\n // Remove attributes and listeners which no longer exist.\n for (name in oldAttrs) {\n if (name in specialAttrs || name in newAttrs) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = null;\n }\n else {\n element.removeAttribute(name);\n }\n }\n // Add and update new and existing attributes and listeners.\n for (name in newAttrs) {\n if (name in specialAttrs || oldAttrs[name] === newAttrs[name]) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = newAttrs[name];\n }\n else {\n element.setAttribute(name, newAttrs[name]);\n }\n }\n // Update the element `class` attribute.\n if (oldAttrs.className !== newAttrs.className) {\n if (newAttrs.className !== undefined) {\n element.setAttribute('class', newAttrs.className);\n }\n else {\n element.removeAttribute('class');\n }\n }\n // Add the element `for` attribute.\n if (oldAttrs.htmlFor !== newAttrs.htmlFor) {\n if (newAttrs.htmlFor !== undefined) {\n element.setAttribute('for', newAttrs.htmlFor);\n }\n else {\n element.removeAttribute('for');\n }\n }\n // Update the dataset values.\n if (oldAttrs.dataset !== newAttrs.dataset) {\n updateDataset(element, oldAttrs.dataset || {}, newAttrs.dataset || {});\n }\n // Update the inline styles.\n if (oldAttrs.style !== newAttrs.style) {\n updateStyle(element, oldAttrs.style || {}, newAttrs.style || {});\n }\n }\n /**\n * Add dataset values to a newly created HTML element.\n */\n function addDataset(element, dataset) {\n for (var name_2 in dataset) {\n element.setAttribute(\"data-\" + name_2, dataset[name_2]);\n }\n }\n /**\n * Update the dataset values of an HTML element.\n */\n function updateDataset(element, oldDataset, newDataset) {\n for (var name_3 in oldDataset) {\n if (!(name_3 in newDataset)) {\n element.removeAttribute(\"data-\" + name_3);\n }\n }\n for (var name_4 in newDataset) {\n if (oldDataset[name_4] !== newDataset[name_4]) {\n element.setAttribute(\"data-\" + name_4, newDataset[name_4]);\n }\n }\n }\n /**\n * Add inline style values to a newly created HTML element.\n */\n function addStyle(element, style) {\n var elemStyle = element.style;\n var name;\n for (name in style) {\n elemStyle[name] = style[name];\n }\n }\n /**\n * Update the inline style values of an HTML element.\n */\n function updateStyle(element, oldStyle, newStyle) {\n var elemStyle = element.style;\n var name;\n for (name in oldStyle) {\n if (!(name in newStyle)) {\n elemStyle[name] = '';\n }\n }\n for (name in newStyle) {\n if (oldStyle[name] !== newStyle[name]) {\n elemStyle[name] = newStyle[name];\n }\n }\n }\n /**\n * Collect a mapping of keyed elements for the host content.\n */\n function collectKeys(host, content) {\n var node = host.firstChild;\n var keyMap = Object.create(null);\n for (var _i = 0, content_1 = content; _i < content_1.length; _i++) {\n var vNode = content_1[_i];\n if (vNode.type === 'element' && vNode.attrs.key) {\n keyMap[vNode.attrs.key] = { vNode: vNode, element: node };\n }\n node = node.nextSibling;\n }\n return keyMap;\n }\n})(Private || (Private = {}));\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar disposable_1 = require(\"@phosphor/disposable\");\r\n/**\r\n * An object which manages a drag-drop operation.\r\n *\r\n * A drag object dispatches four different events to drop targets:\r\n *\r\n * - `'p-dragenter'` - Dispatched when the mouse enters the target\r\n * element. This event must be canceled in order to receive any\r\n * of the other events.\r\n *\r\n * - `'p-dragover'` - Dispatched when the mouse moves over the drop\r\n * target. It must cancel the event and set the `dropAction` to one\r\n * of the supported actions in order to receive drop events.\r\n *\r\n * - `'p-dragleave'` - Dispatched when the mouse leaves the target\r\n * element. This includes moving the mouse into child elements.\r\n *\r\n * - `'p-drop'`- Dispatched when the mouse is released over the target\r\n * element when the target indicates an appropriate drop action. If\r\n * the event is canceled, the indicated drop action is returned to\r\n * the initiator through the resolved promise.\r\n *\r\n * A drag operation can be terminated at any time by pressing `Escape`\r\n * or by disposing the drag object.\r\n *\r\n * A drag object has the ability to automatically scroll a scrollable\r\n * element when the mouse is hovered near one of its edges. To enable\r\n * this, add the `data-p-dragscroll` attribute to any element which\r\n * the drag object should consider for scrolling.\r\n *\r\n * #### Notes\r\n * This class is designed to be used when dragging and dropping custom\r\n * data *within* a single application. It is *not* a replacement for\r\n * the native drag-drop API. Instead, it provides an API which allows\r\n * drag operations to be initiated programmatically and enables the\r\n * transfer of arbitrary non-string objects; features which are not\r\n * possible with the native drag-drop API.\r\n */\r\nvar Drag = /** @class */ (function () {\r\n /**\r\n * Construct a new drag object.\r\n *\r\n * @param options - The options for initializing the drag.\r\n */\r\n function Drag(options) {\r\n var _this = this;\r\n /**\r\n * The scroll loop handler function.\r\n */\r\n this._onScrollFrame = function () {\r\n // Bail early if there is no scroll target.\r\n if (!_this._scrollTarget) {\r\n return;\r\n }\r\n // Unpack the scroll target.\r\n var _a = _this._scrollTarget, element = _a.element, edge = _a.edge, distance = _a.distance;\r\n // Calculate the scroll delta using nonlinear acceleration.\r\n var d = Private.SCROLL_EDGE_SIZE - distance;\r\n var f = Math.pow(d / Private.SCROLL_EDGE_SIZE, 2);\r\n var s = Math.max(1, Math.round(f * Private.SCROLL_EDGE_SIZE));\r\n // Scroll the element in the specified direction.\r\n switch (edge) {\r\n case 'top':\r\n element.scrollTop -= s;\r\n break;\r\n case 'left':\r\n element.scrollLeft -= s;\r\n break;\r\n case 'right':\r\n element.scrollLeft += s;\r\n break;\r\n case 'bottom':\r\n element.scrollTop += s;\r\n break;\r\n }\r\n // Request the next cycle of the scroll loop.\r\n requestAnimationFrame(_this._onScrollFrame);\r\n };\r\n this._disposed = false;\r\n this._dropAction = 'none';\r\n this._override = null;\r\n this._currentTarget = null;\r\n this._currentElement = null;\r\n this._promise = null;\r\n this._scrollTarget = null;\r\n this._resolve = null;\r\n this.mimeData = options.mimeData;\r\n this.dragImage = options.dragImage || null;\r\n this.proposedAction = options.proposedAction || 'copy';\r\n this.supportedActions = options.supportedActions || 'all';\r\n this.source = options.source || null;\r\n }\r\n /**\r\n * Dispose of the resources held by the drag object.\r\n *\r\n * #### Notes\r\n * This will cancel the drag operation if it is active.\r\n */\r\n Drag.prototype.dispose = function () {\r\n // Do nothing if the drag object is already disposed.\r\n if (this._disposed) {\r\n return;\r\n }\r\n this._disposed = true;\r\n // If there is a current target, dispatch a drag leave event.\r\n if (this._currentTarget) {\r\n var event_1 = Private.createMouseEvent('mouseup', -1, -1);\r\n Private.dispatchDragLeave(this, this._currentTarget, null, event_1);\r\n }\r\n // Finalize the drag object with `'none'`.\r\n this._finalize('none');\r\n };\r\n Object.defineProperty(Drag.prototype, \"isDisposed\", {\r\n /**\r\n * Test whether the drag object is disposed.\r\n */\r\n get: function () {\r\n return this._disposed;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Start the drag operation at the specified client position.\r\n *\r\n * @param clientX - The client X position for the drag start.\r\n *\r\n * @param clientY - The client Y position for the drag start.\r\n *\r\n * @returns A promise which resolves to the result of the drag.\r\n *\r\n * #### Notes\r\n * If the drag has already been started, the promise created by the\r\n * first call to `start` is returned.\r\n *\r\n * If the drag operation has ended, or if the drag object has been\r\n * disposed, the returned promise will resolve to `'none'`.\r\n *\r\n * The drag object will be automatically disposed when drag operation\r\n * completes. This means `Drag` objects are for single-use only.\r\n *\r\n * This method assumes the left mouse button is already held down.\r\n */\r\n Drag.prototype.start = function (clientX, clientY) {\r\n var _this = this;\r\n // If the drag object is already disposed, resolve to `None`.\r\n if (this._disposed) {\r\n return Promise.resolve('none');\r\n }\r\n // If the drag has already been started, return the promise.\r\n if (this._promise) {\r\n return this._promise;\r\n }\r\n // Install the document listeners for the drag object.\r\n this._addListeners();\r\n // Attach the drag image at the specified client position.\r\n this._attachDragImage(clientX, clientY);\r\n // Create the promise which will be resolved on completion.\r\n this._promise = new Promise(function (resolve, reject) {\r\n _this._resolve = resolve;\r\n });\r\n // Trigger a fake move event to kick off the drag operation.\r\n var event = Private.createMouseEvent('mousemove', clientX, clientY);\r\n document.dispatchEvent(event);\r\n // Return the pending promise for the drag operation.\r\n return this._promise;\r\n };\r\n /**\r\n * Handle the DOM events for the drag operation.\r\n *\r\n * @param event - The DOM event sent to the drag object.\r\n *\r\n * #### Notes\r\n * This method implements the DOM `EventListener` interface and is\r\n * called in response to events on the document. It should not be\r\n * called directly by user code.\r\n */\r\n Drag.prototype.handleEvent = function (event) {\r\n switch (event.type) {\r\n case 'mousemove':\r\n this._evtMouseMove(event);\r\n break;\r\n case 'mouseup':\r\n this._evtMouseUp(event);\r\n break;\r\n case 'keydown':\r\n this._evtKeyDown(event);\r\n break;\r\n default:\r\n // Stop all other events during drag-drop.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n }\r\n };\r\n /**\r\n * Handle the `'mousemove'` event for the drag object.\r\n */\r\n Drag.prototype._evtMouseMove = function (event) {\r\n // Stop all input events during drag-drop.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Update the current target node and dispatch enter/leave events.\r\n this._updateCurrentTarget(event);\r\n // Update the drag scroll element.\r\n this._updateDragScroll(event);\r\n // Move the drag image to the specified client position. This is\r\n // performed *after* dispatching to prevent unnecessary reflows.\r\n this._moveDragImage(event.clientX, event.clientY);\r\n };\r\n /**\r\n * Handle the `'mouseup'` event for the drag object.\r\n */\r\n Drag.prototype._evtMouseUp = function (event) {\r\n // Stop all input events during drag-drop.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Do nothing if the left button is not released.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Update the current target node and dispatch enter/leave events.\r\n // This prevents a subtle issue where the DOM mutates under the\r\n // cursor after the last move event but before the drop event.\r\n this._updateCurrentTarget(event);\r\n // If there is no current target, finalize with `'none'`.\r\n if (!this._currentTarget) {\r\n this._finalize('none');\r\n return;\r\n }\r\n // If the last drop action was `'none'`, dispatch a leave event\r\n // to the current target and finalize the drag with `'none'`.\r\n if (this._dropAction === 'none') {\r\n Private.dispatchDragLeave(this, this._currentTarget, null, event);\r\n this._finalize('none');\r\n return;\r\n }\r\n // Dispatch the drop event at the current target and finalize\r\n // with the resulting drop action.\r\n var action = Private.dispatchDrop(this, this._currentTarget, event);\r\n this._finalize(action);\r\n };\r\n /**\r\n * Handle the `'keydown'` event for the drag object.\r\n */\r\n Drag.prototype._evtKeyDown = function (event) {\r\n // Stop all input events during drag-drop.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Cancel the drag if `Escape` is pressed.\r\n if (event.keyCode === 27) {\r\n this.dispose();\r\n }\r\n };\r\n /**\r\n * Add the document event listeners for the drag object.\r\n */\r\n Drag.prototype._addListeners = function () {\r\n document.addEventListener('mousedown', this, true);\r\n document.addEventListener('mousemove', this, true);\r\n document.addEventListener('mouseup', this, true);\r\n document.addEventListener('mouseenter', this, true);\r\n document.addEventListener('mouseleave', this, true);\r\n document.addEventListener('mouseover', this, true);\r\n document.addEventListener('mouseout', this, true);\r\n document.addEventListener('keydown', this, true);\r\n document.addEventListener('keyup', this, true);\r\n document.addEventListener('keypress', this, true);\r\n document.addEventListener('contextmenu', this, true);\r\n };\r\n /**\r\n * Remove the document event listeners for the drag object.\r\n */\r\n Drag.prototype._removeListeners = function () {\r\n document.removeEventListener('mousedown', this, true);\r\n document.removeEventListener('mousemove', this, true);\r\n document.removeEventListener('mouseup', this, true);\r\n document.removeEventListener('mouseenter', this, true);\r\n document.removeEventListener('mouseleave', this, true);\r\n document.removeEventListener('mouseover', this, true);\r\n document.removeEventListener('mouseout', this, true);\r\n document.removeEventListener('keydown', this, true);\r\n document.removeEventListener('keyup', this, true);\r\n document.removeEventListener('keypress', this, true);\r\n document.removeEventListener('contextmenu', this, true);\r\n };\r\n /**\r\n * Update the drag scroll element under the mouse.\r\n */\r\n Drag.prototype._updateDragScroll = function (event) {\r\n // Find the scroll target under the mouse.\r\n var target = Private.findScrollTarget(event);\r\n // Bail if there is nothing to scroll.\r\n if (!this._scrollTarget && !target) {\r\n return;\r\n }\r\n // Start the scroll loop if needed.\r\n if (!this._scrollTarget) {\r\n setTimeout(this._onScrollFrame, 500);\r\n }\r\n // Update the scroll target.\r\n this._scrollTarget = target;\r\n };\r\n /**\r\n * Update the current target node using the given mouse event.\r\n */\r\n Drag.prototype._updateCurrentTarget = function (event) {\r\n // Fetch common local state.\r\n var prevTarget = this._currentTarget;\r\n var currTarget = this._currentTarget;\r\n var prevElem = this._currentElement;\r\n // Find the current indicated element at the given position.\r\n var currElem = document.elementFromPoint(event.clientX, event.clientY);\r\n // Update the current element reference.\r\n this._currentElement = currElem;\r\n // If the indicated element changes from the previous iteration,\r\n // and is different from the current target, dispatch the exit\r\n // event to the target.\r\n if (currElem !== prevElem && currElem !== currTarget) {\r\n Private.dispatchDragExit(this, currTarget, currElem, event);\r\n }\r\n // If the indicated element changes from the previous iteration,\r\n // and is different from the current target, dispatch the enter\r\n // event and compute the new target element.\r\n if (currElem !== prevElem && currElem !== currTarget) {\r\n currTarget = Private.dispatchDragEnter(this, currElem, currTarget, event);\r\n }\r\n // If the current target element has changed, update the current\r\n // target reference and dispatch the leave event to the old target.\r\n if (currTarget !== prevTarget) {\r\n this._currentTarget = currTarget;\r\n Private.dispatchDragLeave(this, prevTarget, currTarget, event);\r\n }\r\n // Dispatch the drag over event and update the drop action.\r\n var action = Private.dispatchDragOver(this, currTarget, event);\r\n this._setDropAction(action);\r\n };\r\n /**\r\n * Attach the drag image element at the specified location.\r\n *\r\n * This is a no-op if there is no drag image element.\r\n */\r\n Drag.prototype._attachDragImage = function (clientX, clientY) {\r\n if (!this.dragImage) {\r\n return;\r\n }\r\n this.dragImage.classList.add('p-mod-drag-image');\r\n var style = this.dragImage.style;\r\n style.pointerEvents = 'none';\r\n style.position = 'fixed';\r\n style.top = clientY + \"px\";\r\n style.left = clientX + \"px\";\r\n document.body.appendChild(this.dragImage);\r\n };\r\n /**\r\n * Move the drag image element to the specified location.\r\n *\r\n * This is a no-op if there is no drag image element.\r\n */\r\n Drag.prototype._moveDragImage = function (clientX, clientY) {\r\n if (!this.dragImage) {\r\n return;\r\n }\r\n var style = this.dragImage.style;\r\n style.top = clientY + \"px\";\r\n style.left = clientX + \"px\";\r\n };\r\n /**\r\n * Detach the drag image element from the DOM.\r\n *\r\n * This is a no-op if there is no drag image element.\r\n */\r\n Drag.prototype._detachDragImage = function () {\r\n if (!this.dragImage) {\r\n return;\r\n }\r\n var parent = this.dragImage.parentNode;\r\n if (!parent) {\r\n return;\r\n }\r\n parent.removeChild(this.dragImage);\r\n };\r\n /**\r\n * Set the internal drop action state and update the drag cursor.\r\n */\r\n Drag.prototype._setDropAction = function (action) {\r\n action = Private.validateAction(action, this.supportedActions);\r\n if (this._override && this._dropAction === action) {\r\n return;\r\n }\r\n switch (action) {\r\n case 'none':\r\n this._dropAction = action;\r\n this._override = Drag.overrideCursor('no-drop');\r\n break;\r\n case 'copy':\r\n this._dropAction = action;\r\n this._override = Drag.overrideCursor('copy');\r\n break;\r\n case 'link':\r\n this._dropAction = action;\r\n this._override = Drag.overrideCursor('alias');\r\n break;\r\n case 'move':\r\n this._dropAction = action;\r\n this._override = Drag.overrideCursor('move');\r\n break;\r\n }\r\n };\r\n /**\r\n * Finalize the drag operation and resolve the drag promise.\r\n */\r\n Drag.prototype._finalize = function (action) {\r\n // Store the resolve function as a temp variable.\r\n var resolve = this._resolve;\r\n // Remove the document event listeners.\r\n this._removeListeners();\r\n // Detach the drag image.\r\n this._detachDragImage();\r\n // Dispose of the cursor override.\r\n if (this._override) {\r\n this._override.dispose();\r\n this._override = null;\r\n }\r\n // Clear the mime data.\r\n this.mimeData.clear();\r\n // Clear the rest of the internal drag state.\r\n this._disposed = true;\r\n this._dropAction = 'none';\r\n this._currentTarget = null;\r\n this._currentElement = null;\r\n this._scrollTarget = null;\r\n this._promise = null;\r\n this._resolve = null;\r\n // Finally, resolve the promise to the given drop action.\r\n if (resolve) {\r\n resolve(action);\r\n }\r\n };\r\n return Drag;\r\n}());\r\nexports.Drag = Drag;\r\n/**\r\n * The namespace for the `Drag` class statics.\r\n */\r\n(function (Drag) {\r\n /**\r\n * Override the cursor icon for the entire document.\r\n *\r\n * @param cursor - The string representing the cursor style.\r\n *\r\n * @returns A disposable which will clear the override when disposed.\r\n *\r\n * #### Notes\r\n * The most recent call to `overrideCursor` takes precedence.\r\n * Disposing an old override has no effect on the current override.\r\n *\r\n * This utility function is used by the `Drag` class to override the\r\n * mouse cursor during a drag-drop operation, but it can also be used\r\n * by other classes to fix the cursor icon during normal mouse drags.\r\n *\r\n * #### Example\r\n * ```typescript\r\n * import { Drag } from '@phosphor/dragdrop';\r\n *\r\n * // Force the cursor to be 'wait' for the entire document.\r\n * let override = Drag.overrideCursor('wait');\r\n *\r\n * // Clear the override by disposing the return value.\r\n * override.dispose();\r\n * ```\r\n */\r\n function overrideCursor(cursor) {\r\n var id = ++overrideCursorID;\r\n document.body.style.cursor = cursor;\r\n document.body.classList.add('p-mod-override-cursor');\r\n return new disposable_1.DisposableDelegate(function () {\r\n if (id === overrideCursorID) {\r\n document.body.style.cursor = '';\r\n document.body.classList.remove('p-mod-override-cursor');\r\n }\r\n });\r\n }\r\n Drag.overrideCursor = overrideCursor;\r\n /**\r\n * The internal id for the active cursor override.\r\n */\r\n var overrideCursorID = 0;\r\n})(Drag = exports.Drag || (exports.Drag = {}));\r\nexports.Drag = Drag;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * The size of a drag scroll edge, in pixels.\r\n */\r\n Private.SCROLL_EDGE_SIZE = 20;\r\n /**\r\n * Validate the given action is one of the supported actions.\r\n *\r\n * Returns the given action or `'none'` if the action is unsupported.\r\n */\r\n function validateAction(action, supported) {\r\n return (actionTable[action] & supportedTable[supported]) ? action : 'none';\r\n }\r\n Private.validateAction = validateAction;\r\n /**\r\n * Create a left mouse event at the given position.\r\n *\r\n * @param type - The event type for the mouse event.\r\n *\r\n * @param clientX - The client X position.\r\n *\r\n * @param clientY - The client Y position.\r\n *\r\n * @returns A newly created and initialized mouse event.\r\n */\r\n function createMouseEvent(type, clientX, clientY) {\r\n var event = document.createEvent('MouseEvent');\r\n event.initMouseEvent(type, true, true, window, 0, 0, 0, clientX, clientY, false, false, false, false, 0, null);\r\n return event;\r\n }\r\n Private.createMouseEvent = createMouseEvent;\r\n /**\r\n * Find the drag scroll target under the mouse, if any.\r\n */\r\n function findScrollTarget(event) {\r\n // Look up the client mouse position.\r\n var x = event.clientX;\r\n var y = event.clientY;\r\n // Get the element under the mouse.\r\n var element = document.elementFromPoint(x, y);\r\n // Search for a scrollable target based on the mouse position.\r\n // The null assert in third clause of for-loop is required due to:\r\n // https://github.com/Microsoft/TypeScript/issues/14143\r\n for (; element; element = element.parentElement) {\r\n // Ignore elements which are not marked as scrollable.\r\n if (!element.hasAttribute('data-p-dragscroll')) {\r\n continue;\r\n }\r\n // Set up the coordinate offsets for the element.\r\n var offsetX = 0;\r\n var offsetY = 0;\r\n if (element === document.body) {\r\n offsetX = window.pageXOffset;\r\n offsetY = window.pageYOffset;\r\n }\r\n // Get the element bounds in viewport coordinates.\r\n var r = element.getBoundingClientRect();\r\n var top_1 = r.top + offsetY;\r\n var left = r.left + offsetX;\r\n var right = left + r.width;\r\n var bottom = top_1 + r.height;\r\n // Skip the element if it's not under the mouse.\r\n if (x < left || x >= right || y < top_1 || y >= bottom) {\r\n continue;\r\n }\r\n // Compute the distance to each edge.\r\n var dl = x - left + 1;\r\n var dt = y - top_1 + 1;\r\n var dr = right - x;\r\n var db = bottom - y;\r\n // Find the smallest of the edge distances.\r\n var distance = Math.min(dl, dt, dr, db);\r\n // Skip the element if the mouse is not within a scroll edge.\r\n if (distance > Private.SCROLL_EDGE_SIZE) {\r\n continue;\r\n }\r\n // Set up the edge result variable.\r\n var edge = void 0;\r\n // Find the edge for the computed distance.\r\n switch (distance) {\r\n case db:\r\n edge = 'bottom';\r\n break;\r\n case dt:\r\n edge = 'top';\r\n break;\r\n case dr:\r\n edge = 'right';\r\n break;\r\n case dl:\r\n edge = 'left';\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n // Compute how much the element can scroll in width and height.\r\n var dsw = element.scrollWidth - element.clientWidth;\r\n var dsh = element.scrollHeight - element.clientHeight;\r\n // Determine if the element should be scrolled for the edge.\r\n var shouldScroll = void 0;\r\n switch (edge) {\r\n case 'top':\r\n shouldScroll = dsh > 0 && element.scrollTop > 0;\r\n break;\r\n case 'left':\r\n shouldScroll = dsw > 0 && element.scrollLeft > 0;\r\n break;\r\n case 'right':\r\n shouldScroll = dsw > 0 && element.scrollLeft < dsw;\r\n break;\r\n case 'bottom':\r\n shouldScroll = dsh > 0 && element.scrollTop < dsh;\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n // Skip the element if it should not be scrolled.\r\n if (!shouldScroll) {\r\n continue;\r\n }\r\n // Return the drag scroll target.\r\n return { element: element, edge: edge, distance: distance };\r\n }\r\n // No drag scroll target was found.\r\n return null;\r\n }\r\n Private.findScrollTarget = findScrollTarget;\r\n /**\r\n * Dispatch a drag enter event to the indicated element.\r\n *\r\n * @param drag - The drag object associated with the action.\r\n *\r\n * @param currElem - The currently indicated element, or `null`. This\r\n * is the \"immediate user selection\" from the whatwg spec.\r\n *\r\n * @param currTarget - The current drag target element, or `null`. This\r\n * is the \"current target element\" from the whatwg spec.\r\n *\r\n * @param event - The mouse event related to the action.\r\n *\r\n * @returns The element to use as the current drag target. This is the\r\n * \"current target element\" from the whatwg spec, and may be `null`.\r\n *\r\n * #### Notes\r\n * This largely implements the drag enter portion of the whatwg spec:\r\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\r\n */\r\n function dispatchDragEnter(drag, currElem, currTarget, event) {\r\n // If the current element is null, return null as the new target.\r\n if (!currElem) {\r\n return null;\r\n }\r\n // Dispatch a drag enter event to the current element.\r\n var dragEvent = createDragEvent('p-dragenter', drag, event, currTarget);\r\n var canceled = !currElem.dispatchEvent(dragEvent);\r\n // If the event was canceled, use the current element as the new target.\r\n if (canceled) {\r\n return currElem;\r\n }\r\n // If the current element is the document body, keep the original target.\r\n if (currElem === document.body) {\r\n return currTarget;\r\n }\r\n // Dispatch a drag enter event on the document body.\r\n dragEvent = createDragEvent('p-dragenter', drag, event, currTarget);\r\n document.body.dispatchEvent(dragEvent);\r\n // Ignore the event cancellation, and use the body as the new target.\r\n return document.body;\r\n }\r\n Private.dispatchDragEnter = dispatchDragEnter;\r\n /**\r\n * Dispatch a drag exit event to the indicated element.\r\n *\r\n * @param drag - The drag object associated with the action.\r\n *\r\n * @param prevTarget - The previous target element, or `null`. This\r\n * is the previous \"current target element\" from the whatwg spec.\r\n *\r\n * @param currTarget - The current drag target element, or `null`. This\r\n * is the \"current target element\" from the whatwg spec.\r\n *\r\n * @param event - The mouse event related to the action.\r\n *\r\n * #### Notes\r\n * This largely implements the drag exit portion of the whatwg spec:\r\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\r\n */\r\n function dispatchDragExit(drag, prevTarget, currTarget, event) {\r\n // If the previous target is null, do nothing.\r\n if (!prevTarget) {\r\n return;\r\n }\r\n // Dispatch the drag exit event to the previous target.\r\n var dragEvent = createDragEvent('p-dragexit', drag, event, currTarget);\r\n prevTarget.dispatchEvent(dragEvent);\r\n }\r\n Private.dispatchDragExit = dispatchDragExit;\r\n /**\r\n * Dispatch a drag leave event to the indicated element.\r\n *\r\n * @param drag - The drag object associated with the action.\r\n *\r\n * @param prevTarget - The previous target element, or `null`. This\r\n * is the previous \"current target element\" from the whatwg spec.\r\n *\r\n * @param currTarget - The current drag target element, or `null`. This\r\n * is the \"current target element\" from the whatwg spec.\r\n *\r\n * @param event - The mouse event related to the action.\r\n *\r\n * #### Notes\r\n * This largely implements the drag leave portion of the whatwg spec:\r\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\r\n */\r\n function dispatchDragLeave(drag, prevTarget, currTarget, event) {\r\n // If the previous target is null, do nothing.\r\n if (!prevTarget) {\r\n return;\r\n }\r\n // Dispatch the drag leave event to the previous target.\r\n var dragEvent = createDragEvent('p-dragleave', drag, event, currTarget);\r\n prevTarget.dispatchEvent(dragEvent);\r\n }\r\n Private.dispatchDragLeave = dispatchDragLeave;\r\n /**\r\n * Dispatch a drag over event to the indicated element.\r\n *\r\n * @param drag - The drag object associated with the action.\r\n *\r\n * @param currTarget - The current drag target element, or `null`. This\r\n * is the \"current target element\" from the whatwg spec.\r\n *\r\n * @param event - The mouse event related to the action.\r\n *\r\n * @returns The `DropAction` result of the drag over event.\r\n *\r\n * #### Notes\r\n * This largely implements the drag over portion of the whatwg spec:\r\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\r\n */\r\n function dispatchDragOver(drag, currTarget, event) {\r\n // If there is no current target, the drop action is none.\r\n if (!currTarget) {\r\n return 'none';\r\n }\r\n // Dispatch the drag over event to the current target.\r\n var dragEvent = createDragEvent('p-dragover', drag, event, null);\r\n var canceled = !currTarget.dispatchEvent(dragEvent);\r\n // If the event was canceled, return the drop action result.\r\n if (canceled) {\r\n return dragEvent.dropAction;\r\n }\r\n // Otherwise, the effective drop action is none.\r\n return 'none';\r\n }\r\n Private.dispatchDragOver = dispatchDragOver;\r\n /**\r\n * Dispatch a drop event to the indicated element.\r\n *\r\n * @param drag - The drag object associated with the action.\r\n *\r\n * @param currTarget - The current drag target element, or `null`. This\r\n * is the \"current target element\" from the whatwg spec.\r\n *\r\n * @param event - The mouse event related to the action.\r\n *\r\n * @returns The `DropAction` result of the drop event.\r\n *\r\n * #### Notes\r\n * This largely implements the drag over portion of the whatwg spec:\r\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\r\n */\r\n function dispatchDrop(drag, currTarget, event) {\r\n // If there is no current target, the drop action is none.\r\n if (!currTarget) {\r\n return 'none';\r\n }\r\n // Dispatch the drop event to the current target.\r\n var dragEvent = createDragEvent('p-drop', drag, event, null);\r\n var canceled = !currTarget.dispatchEvent(dragEvent);\r\n // If the event was canceled, return the drop action result.\r\n if (canceled) {\r\n return dragEvent.dropAction;\r\n }\r\n // Otherwise, the effective drop action is none.\r\n return 'none';\r\n }\r\n Private.dispatchDrop = dispatchDrop;\r\n /**\r\n * A lookup table from drop action to bit value.\r\n */\r\n var actionTable = {\r\n 'none': 0x0,\r\n 'copy': 0x1,\r\n 'link': 0x2,\r\n 'move': 0x4\r\n };\r\n /**\r\n * A lookup table from supported action to drop action bit mask.\r\n */\r\n var supportedTable = {\r\n 'none': actionTable['none'],\r\n 'copy': actionTable['copy'],\r\n 'link': actionTable['link'],\r\n 'move': actionTable['move'],\r\n 'copy-link': actionTable['copy'] | actionTable['link'],\r\n 'copy-move': actionTable['copy'] | actionTable['move'],\r\n 'link-move': actionTable['link'] | actionTable['move'],\r\n 'all': actionTable['copy'] | actionTable['link'] | actionTable['move']\r\n };\r\n /**\r\n * Create a new initialized `IDragEvent` from the given data.\r\n *\r\n * @param type - The event type for the drag event.\r\n *\r\n * @param drag - The drag object to use for seeding the drag data.\r\n *\r\n * @param event - The mouse event to use for seeding the mouse data.\r\n *\r\n * @param related - The related target for the event, or `null`.\r\n *\r\n * @returns A new object which implements `IDragEvent`.\r\n */\r\n function createDragEvent(type, drag, event, related) {\r\n // Create a new mouse event to use as the drag event. Currently,\r\n // JS engines do now allow user-defined Event subclasses.\r\n var dragEvent = document.createEvent('MouseEvent');\r\n // Initialize the mouse event data.\r\n dragEvent.initMouseEvent(type, true, true, window, 0, event.screenX, event.screenY, event.clientX, event.clientY, event.ctrlKey, event.altKey, event.shiftKey, event.metaKey, event.button, related);\r\n // Forcefully add the custom drag event properties.\r\n dragEvent.dropAction = 'none';\r\n dragEvent.mimeData = drag.mimeData;\r\n dragEvent.proposedAction = drag.proposedAction;\r\n dragEvent.supportedActions = drag.supportedActions;\r\n dragEvent.source = drag.source;\r\n // Return the fully initialized drag event.\r\n return dragEvent;\r\n }\r\n})(Private || (Private = {}));\r\n","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-selection\"));\nconst _ = __importStar(require(\"underscore\"));\nclass Interaction extends widgets.WidgetView {\n initialize(parameters) {\n this.setElement(document.createElementNS(d3.namespaces.svg, \"rect\"));\n this.d3el = d3.select(this.el);\n super.initialize.call(this, parameters);\n }\n render() {\n this.parent = this.options.parent;\n // Opaque interation layer\n this.d3el\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", this.parent.width -\n this.parent.margin.left -\n this.parent.margin.right)\n .attr(\"height\", this.parent.height -\n this.parent.margin.top -\n this.parent.margin.bottom)\n .attr(\"pointer-events\", \"all\")\n .attr(\"visibility\", \"hidden\");\n this.parent.on(\"margin_updated\", this.relayout, this);\n }\n relayout() {\n // Called when the figure margins are updated.\n this.d3el\n .attr(\"width\", this.parent.width -\n this.parent.margin.left -\n this.parent.margin.right)\n .attr(\"height\", this.parent.height -\n this.parent.margin.top -\n this.parent.margin.bottom);\n }\n remove() {\n _.each(this.mark_views, function (mark) { mark.invert_range(); });\n this.d3el.remove();\n super.remove.apply(this);\n }\n}\nexports.Interaction = Interaction;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvSW50ZXJhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILCtEQUFpRDtBQUNqRCx1Q0FBeUI7QUFDekIsc0RBQXNEO0FBQ3RELDhDQUFnQztBQUVoQyxNQUFhLFdBQVksU0FBUSxPQUFPLENBQUMsVUFBVTtJQUUvQyxVQUFVLENBQUMsVUFBVTtRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFFbEMsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxJQUFJO2FBQ0osSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDWixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUNaLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUM7YUFDN0IsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxRQUFRO1FBQ0osOENBQThDO1FBQzlDLElBQUksQ0FBQyxJQUFJO2FBQ0osSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRztZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsTUFBTTtRQUNGLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFTLElBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FLSjtBQTlDRCxrQ0E4Q0MifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst base_1 = require(\"@jupyter-widgets/base\");\nconst version_1 = require(\"./version\");\nclass ScaleModel extends base_1.WidgetModel {\n defaults() {\n return Object.assign({}, base_1.WidgetModel.prototype.defaults(), { _model_name: \"ScaleModel\", _view_name: \"Scale\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, reverse: false, allow_padding: true });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.domains = {};\n this.domain = [];\n this.set_init_state();\n this.set_listeners();\n }\n set_init_state() {\n this.type = \"base\";\n }\n set_listeners() {\n // Function to be implementd by inherited classes.\n }\n set_domain(domain, id) {\n // Call function only if you have computed the domain yourself. If\n // you want the scale to compute the domain based on the data for\n // your scale view, then call compute_and_set_domain\n this.domains[id] = domain;\n this.update_domain();\n }\n del_domain(domain, id) {\n if (this.domains[id] !== undefined) {\n delete this.domains[id];\n this.update_domain();\n }\n }\n get_domain_slice_in_order() {\n if (this.reverse)\n return this.domain.slice().reverse();\n else\n return this.domain.slice();\n }\n}\nexports.ScaleModel = ScaleModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhbGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TY2FsZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUVILGdEQUFvRDtBQUNwRCx1Q0FBeUM7QUFFekMsTUFDZSxVQUFXLFNBQVEsa0JBQVc7SUFFekMsUUFBUTtRQUNKLHlCQUFXLGtCQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUN2QyxXQUFXLEVBQUUsWUFBWSxFQUN4QixVQUFVLEVBQUUsT0FBTyxFQUNwQixhQUFhLEVBQUUsUUFBUSxFQUN2QixZQUFZLEVBQUUsUUFBUSxFQUN0QixxQkFBcUIsRUFBRSxzQkFBWSxFQUNuQyxvQkFBb0IsRUFBRSxzQkFBWSxFQUNsQyxPQUFPLEVBQUUsS0FBSyxFQUNkLGFBQWEsRUFBRSxJQUFJLElBQ3JCO0lBQ04sQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTztRQUMxQixLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDVCxrREFBa0Q7SUFDdEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNqQixrRUFBa0U7UUFDbEUsaUVBQWlFO1FBQ2pFLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNqQixJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDeEI7SUFDTCxDQUFDO0lBRUQseUJBQXlCO1FBQ3JCLElBQUcsSUFBSSxDQUFDLE9BQU87WUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7O1lBRXJDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0NBU0o7QUE3REQsZ0NBNkRDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _ = __importStar(require(\"underscore\"));\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"));\nconst ScaleModel_1 = require(\"./ScaleModel\");\nclass LinearScaleModel extends ScaleModel_1.ScaleModel {\n defaults() {\n return Object.assign({}, ScaleModel_1.ScaleModel.prototype.defaults(), { _model_name: \"LinearScaleModel\", _view_name: \"LinearScale\", min: null, max: null, min_range: 0.6, mid_range: 0.8 });\n }\n set_init_state() {\n this.type = \"linear\";\n this.global_min = Number.NEGATIVE_INFINITY;\n this.global_max = Number.POSITIVE_INFINITY;\n }\n set_listeners() {\n this.on(\"change:reverse\", this.reverse_changed, this);\n this.reverse_changed(undefined, undefined, undefined);\n this.on_some_change([\"min\", \"max\"], this.min_max_changed, this);\n this.min_max_changed();\n this.on_some_change([\"min_range\", \"mid_range\", \"stabilized\"], this.update_domain, this);\n }\n min_max_changed() {\n this.min = this.get(\"min\");\n this.max = this.get(\"max\");\n this.min_from_data = (this.min === null);\n this.max_from_data = (this.max === null);\n this.update_domain();\n }\n reverse_changed(model, value, options) {\n const prev_reverse = (model === undefined) ? false : model.previous(\"reverse\");\n this.reverse = this.get(\"reverse\");\n // the domain should be reversed only if the previous value of reverse\n // is different from the current value. During init, domain should be\n // reversed only if reverse is set to True.\n const reverse_domain = (prev_reverse + this.reverse) % 2;\n if (this.domain.length > 0 && reverse_domain === 1) {\n this.domain.reverse();\n this.trigger(\"domain_changed\", this.domain);\n }\n }\n update_domain() {\n const that = this;\n const min = (!this.min_from_data) ?\n this.min : d3.min(_.map(this.domains, function (d) {\n return d.length > 0 ? d[0] : that.global_max;\n }));\n const max = (!this.max_from_data) ?\n this.max : d3.max(_.map(this.domains, function (d) {\n return d.length > 1 ? d[1] : that.global_min;\n }));\n const mid = (min + max) * 0.5;\n const new_width = (max - min) * 0.5 / this.get(\"mid_range\");\n const prev_domain = this.domain;\n const min_index = (this.reverse) ? 1 : 0;\n const prev_min = prev_domain[min_index];\n const prev_max = prev_domain[1 - min_index];\n const prev_mid = (prev_max + prev_min) * 0.5;\n const min_width = (prev_max - prev_min) * 0.5 * this.get(\"min_range\");\n const stabilized = this.get(\"stabilized\");\n // If the scale is stabilized, only update if the new min/max is without\n // a certain range, else update as soon as the new min/max is different.\n const update_domain = stabilized ?\n (!(min >= prev_min) || !(min <= prev_mid - min_width) ||\n !(max <= prev_max) || !(max >= prev_mid + min_width)) :\n (min !== prev_min || max !== prev_max);\n if (update_domain) {\n const new_min = stabilized ? mid - new_width : min;\n const new_max = stabilized ? mid + new_width : max;\n this.domain = (this.reverse) ? [new_max, new_min] : [new_min, new_max];\n this.trigger(\"domain_changed\", this.domain);\n }\n }\n compute_and_set_domain(data_array, id) {\n // Takes an array and calculates the domain for the particular\n // view. If you have the domain already calculated on your side,\n // call set_domain function.\n if (!data_array || data_array.length === 0) {\n this.set_domain([], id);\n return;\n }\n const data = data_array[0] instanceof Array ?\n data_array : [data_array];\n const min = d3.min(data.map(function (d) { return d3.min(d); }));\n const max = d3.max(data.map(function (d) { return d3.max(d); }));\n this.set_domain([min, max], id);\n }\n}\nexports.LinearScaleModel = LinearScaleModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZWFyU2NhbGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9MaW5lYXJTY2FsZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCw4Q0FBaUM7QUFDakMsdUNBQXlCO0FBQ3pCLGtEQUFrRDtBQUNsRCw2Q0FBMEM7QUFFMUMsTUFBYSxnQkFBaUIsU0FBUSx1QkFBVTtJQUU1QyxRQUFRO1FBQ0oseUJBQVcsdUJBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3RDLFdBQVcsRUFBRSxrQkFBa0IsRUFDL0IsVUFBVSxFQUFFLGFBQWEsRUFDekIsR0FBRyxFQUFFLElBQUksRUFDVCxHQUFHLEVBQUUsSUFBSSxFQUNULFNBQVMsRUFBRSxHQUFHLEVBQ2QsU0FBUyxFQUFFLEdBQUcsSUFDaEI7SUFDTixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQy9DLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVks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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-collection\"));\nconst pi = Math.PI, radian = pi / 180, sqrt3 = Math.sqrt(3), tan30 = Math.tan(pi / 6);\nconst circleSymbol = function (size) {\n const r = Math.sqrt(size / pi);\n return \"M0,\" + r +\n \"A\" + r + \",\" + r + \" 0 1,1 0,\" + (-r) +\n \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r +\n \"Z\";\n};\nconst bqSymbolTypes = d3.map({\n \"circle\": circleSymbol,\n \"cross\": function (size, e) {\n const r = Math.sqrt(size / 5) / 2;\n return \"M\" + -3 * r + \",\" + -r +\n \"H\" + -r +\n \"V\" + -3 * r +\n \"H\" + r +\n \"V\" + -r +\n \"H\" + 3 * r +\n \"V\" + r +\n \"H\" + r +\n \"V\" + 3 * r +\n \"H\" + -r +\n \"V\" + r +\n \"H\" + -3 * r +\n \"Z\";\n },\n \"diamond\": function (size, s) {\n const ry = Math.sqrt(size / (2 * tan30)), rx = ry * tan30;\n return \"M0,\" + -ry +\n \"L\" + rx + \",0\" +\n \" 0,\" + ry +\n \" \" + -rx + \",0\" +\n \"Z\";\n },\n \"square\": function (size, s) {\n const r = Math.sqrt(size) / 2;\n return \"M\" + -r + \",\" + -r +\n \"L\" + r + \",\" + -r +\n \" \" + r + \",\" + r +\n \" \" + -r + \",\" + r +\n \"Z\";\n },\n \"triangle-down\": function (size, s) {\n const rx = Math.sqrt(size / sqrt3), ry = rx * sqrt3 / 2;\n return \"M0,\" + ry +\n \"L\" + rx + \",\" + -ry +\n \" \" + -rx + \",\" + -ry +\n \"Z\";\n },\n \"triangle-up\": function (size, s) {\n const rx = Math.sqrt(size / sqrt3), ry = rx * sqrt3 / 2;\n return \"M0,\" + -ry +\n \"L\" + rx + \",\" + ry +\n \" \" + -rx + \",\" + ry +\n \"Z\";\n },\n \"arrow\": function (size, skew) {\n const angle = 60 + (5 - 60) * skew, s = Math.tan(angle * radian), ry = Math.sqrt(size / s), rx = ry * s / 2;\n return \"M0,\" + -ry +\n \"L\" + rx + \",\" + ry +\n \" \" + -rx + \",\" + ry +\n \"Z\";\n },\n \"ellipse\": function (size, skew) {\n const s = Math.pow(10, skew), rx = Math.sqrt(size / (pi * s)), ry = rx * s;\n return \"M0,\" + ry +\n \"A\" + rx + \",\" + ry + \" 0 1,1 0,\" + (-ry) +\n \"A\" + rx + \",\" + ry + \" 0 1,1 0,\" + ry +\n \"Z\";\n },\n \"rectangle\": function (size, skew) {\n const s = Math.pow(10, skew), rx = Math.sqrt(size / s) / 2, ry = rx * s;\n return \"M\" + -rx + \",\" + -ry +\n \"L\" + rx + \",\" + -ry +\n \" \" + rx + \",\" + ry +\n \" \" + -rx + \",\" + ry +\n \"Z\";\n },\n});\nfunction symbolSize() {\n return 64;\n}\nfunction symbolType() {\n return \"circle\";\n}\nfunction symbolSkew() {\n return 0.5;\n}\nfunction constant(x) {\n return function () {\n return x;\n };\n}\nfunction functor(x) {\n return typeof x === \"function\" ? x : constant(x);\n}\nconst bqSymbol = function () {\n let type = symbolType;\n let size = symbolSize;\n let skew = symbolSkew;\n function symbol(d, i) {\n return (bqSymbolTypes.get(type.call(this, d, i)) || circleSymbol)(size.call(this, d, i), skew.call(this, d, i));\n }\n symbol.type = function (x) {\n if (!arguments.length)\n return type;\n type = functor(x);\n return symbol;\n };\n // size of symbol in square pixels\n symbol.size = function (x) {\n if (!arguments.length)\n return size;\n size = functor(x);\n return symbol;\n };\n // skew of symbol, in [0, 1]\n symbol.skew = function (x) {\n if (!arguments.length)\n return skew;\n skew = functor(x);\n return symbol;\n };\n return symbol;\n};\nexports.symbol = bqSymbol;\nexports.types = bqSymbolTypes.keys();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFya2Vycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9NYXJrZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsdURBQXVEO0FBRXZELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQ2QsTUFBTSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQ2pCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNwQixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFN0IsTUFBTSxZQUFZLEdBQUcsVUFBUyxJQUFJO0lBQzlCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sS0FBSyxHQUFHLENBQUM7UUFDWixHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDO1FBQ25DLEdBQUcsQ0FBQztBQUNaLENBQUMsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDekIsUUFBUSxFQUFFLFlBQVk7SUFDdEIsT0FBTyxFQUFFLFVBQVMsSUFBSSxFQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDUixHQUFHLEdB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","export function linear(t) {\n return +t;\n}\n","export function quadIn(t) {\n return t * t;\n}\n\nexport function quadOut(t) {\n return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","export function expIn(t) {\n return Math.pow(2, 10 * t - 10);\n}\n\nexport function expOut(t) {\n return 1 - Math.pow(2, -10 * t);\n}\n\nexport function expInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export {\n linear as easeLinear\n} from \"./linear\";\n\nexport {\n quadInOut as easeQuad,\n quadIn as easeQuadIn,\n quadOut as easeQuadOut,\n quadInOut as easeQuadInOut\n} from \"./quad\";\n\nexport {\n cubicInOut as easeCubic,\n cubicIn as easeCubicIn,\n cubicOut as easeCubicOut,\n cubicInOut as easeCubicInOut\n} from \"./cubic\";\n\nexport {\n polyInOut as easePoly,\n polyIn as easePolyIn,\n polyOut as easePolyOut,\n polyInOut as easePolyInOut\n} from \"./poly\";\n\nexport {\n sinInOut as easeSin,\n sinIn as easeSinIn,\n sinOut as easeSinOut,\n sinInOut as easeSinInOut\n} from \"./sin\";\n\nexport {\n expInOut as easeExp,\n expIn as easeExpIn,\n expOut as easeExpOut,\n expInOut as easeExpInOut\n} from \"./exp\";\n\nexport {\n circleInOut as easeCircle,\n circleIn as easeCircleIn,\n circleOut as easeCircleOut,\n circleInOut as easeCircleInOut\n} from \"./circle\";\n\nexport {\n bounceOut as easeBounce,\n bounceIn as easeBounceIn,\n bounceOut as easeBounceOut,\n bounceInOut as easeBounceInOut\n} from \"./bounce\";\n\nexport {\n backInOut as easeBack,\n backIn as easeBackIn,\n backOut as easeBackOut,\n backInOut as easeBackInOut\n} from \"./back\";\n\nexport {\n elasticOut as easeElastic,\n elasticIn as easeElasticIn,\n elasticOut as easeElasticOut,\n elasticInOut as easeElasticInOut\n} from \"./elastic\";\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar properties_1 = require(\"@phosphor/properties\");\r\nvar boxengine_1 = require(\"./boxengine\");\r\nvar layout_1 = require(\"./layout\");\r\nvar panellayout_1 = require(\"./panellayout\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A layout which arranges its widgets in a single row or column.\r\n */\r\nvar BoxLayout = /** @class */ (function (_super) {\r\n __extends(BoxLayout, _super);\r\n /**\r\n * Construct a new box layout.\r\n *\r\n * @param options - The options for initializing the layout.\r\n */\r\n function BoxLayout(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this) || this;\r\n _this._fixed = 0;\r\n _this._spacing = 4;\r\n _this._dirty = false;\r\n _this._sizers = [];\r\n _this._items = [];\r\n _this._box = null;\r\n _this._alignment = 'start';\r\n _this._direction = 'top-to-bottom';\r\n if (options.direction !== undefined) {\r\n _this._direction = options.direction;\r\n }\r\n if (options.alignment !== undefined) {\r\n _this._alignment = options.alignment;\r\n }\r\n if (options.spacing !== undefined) {\r\n _this._spacing = Private.clampSpacing(options.spacing);\r\n }\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the layout.\r\n */\r\n BoxLayout.prototype.dispose = function () {\r\n // Dispose of the layout items.\r\n algorithm_1.each(this._items, function (item) { item.dispose(); });\r\n // Clear the layout state.\r\n this._box = null;\r\n this._items.length = 0;\r\n this._sizers.length = 0;\r\n // Dispose of the rest of the layout.\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(BoxLayout.prototype, \"direction\", {\r\n /**\r\n * Get the layout direction for the box layout.\r\n */\r\n get: function () {\r\n return this._direction;\r\n },\r\n /**\r\n * Set the layout direction for the box layout.\r\n */\r\n set: function (value) {\r\n if (this._direction === value) {\r\n return;\r\n }\r\n this._direction = value;\r\n if (!this.parent) {\r\n return;\r\n }\r\n this.parent.dataset['direction'] = value;\r\n this.parent.fit();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(BoxLayout.prototype, \"alignment\", {\r\n /**\r\n * Get the content alignment for the box layout.\r\n *\r\n * #### Notes\r\n * This is the alignment of the widgets in the layout direction.\r\n *\r\n * The alignment has no effect if the widgets can expand to fill the\r\n * entire box layout.\r\n */\r\n get: function () {\r\n return this._alignment;\r\n },\r\n /**\r\n * Set the content alignment for the box layout.\r\n *\r\n * #### Notes\r\n * This is the alignment of the widgets in the layout direction.\r\n *\r\n * The alignment has no effect if the widgets can expand to fill the\r\n * entire box layout.\r\n */\r\n set: function (value) {\r\n if (this._alignment === value) {\r\n return;\r\n }\r\n this._alignment = value;\r\n if (!this.parent) {\r\n return;\r\n }\r\n this.parent.dataset['alignment'] = value;\r\n this.parent.update();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(BoxLayout.prototype, \"spacing\", {\r\n /**\r\n * Get the inter-element spacing for the box layout.\r\n */\r\n get: function () {\r\n return this._spacing;\r\n },\r\n /**\r\n * Set the inter-element spacing for the box layout.\r\n */\r\n set: function (value) {\r\n value = Private.clampSpacing(value);\r\n if (this._spacing === value) {\r\n return;\r\n }\r\n this._spacing = value;\r\n if (!this.parent) {\r\n return;\r\n }\r\n this.parent.fit();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Perform layout initialization which requires the parent widget.\r\n */\r\n BoxLayout.prototype.init = function () {\r\n this.parent.dataset['direction'] = this.direction;\r\n this.parent.dataset['alignment'] = this.alignment;\r\n _super.prototype.init.call(this);\r\n };\r\n /**\r\n * Attach a widget to the parent's DOM node.\r\n *\r\n * @param index - The current index of the widget in the layout.\r\n *\r\n * @param widget - The widget to attach to the parent.\r\n *\r\n * #### Notes\r\n * This is a reimplementation of the superclass method.\r\n */\r\n BoxLayout.prototype.attachWidget = function (index, widget) {\r\n // Create and add a new layout item for the widget.\r\n algorithm_1.ArrayExt.insert(this._items, index, new layout_1.LayoutItem(widget));\r\n // Create and add a new sizer for the widget.\r\n algorithm_1.ArrayExt.insert(this._sizers, index, new boxengine_1.BoxSizer());\r\n // Send a `'before-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeAttach);\r\n }\r\n // Add the widget's node to the parent.\r\n this.parent.node.appendChild(widget.node);\r\n // Send an `'after-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterAttach);\r\n }\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * Move a widget in the parent's DOM node.\r\n *\r\n * @param fromIndex - The previous index of the widget in the layout.\r\n *\r\n * @param toIndex - The current index of the widget in the layout.\r\n *\r\n * @param widget - The widget to move in the parent.\r\n *\r\n * #### Notes\r\n * This is a reimplementation of the superclass method.\r\n */\r\n BoxLayout.prototype.moveWidget = function (fromIndex, toIndex, widget) {\r\n // Move the layout item for the widget.\r\n algorithm_1.ArrayExt.move(this._items, fromIndex, toIndex);\r\n // Move the sizer for the widget.\r\n algorithm_1.ArrayExt.move(this._sizers, fromIndex, toIndex);\r\n // Post an update request for the parent widget.\r\n this.parent.update();\r\n };\r\n /**\r\n * Detach a widget from the parent's DOM node.\r\n *\r\n * @param index - The previous index of the widget in the layout.\r\n *\r\n * @param widget - The widget to detach from the parent.\r\n *\r\n * #### Notes\r\n * This is a reimplementation of the superclass method.\r\n */\r\n BoxLayout.prototype.detachWidget = function (index, widget) {\r\n // Remove the layout item for the widget.\r\n var item = algorithm_1.ArrayExt.removeAt(this._items, index);\r\n // Remove the sizer for the widget.\r\n algorithm_1.ArrayExt.removeAt(this._sizers, index);\r\n // Send a `'before-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeDetach);\r\n }\r\n // Remove the widget's node from the parent.\r\n this.parent.node.removeChild(widget.node);\r\n // Send an `'after-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterDetach);\r\n }\r\n // Dispose of the layout item.\r\n item.dispose();\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'before-show'` message.\r\n */\r\n BoxLayout.prototype.onBeforeShow = function (msg) {\r\n _super.prototype.onBeforeShow.call(this, msg);\r\n this.parent.update();\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n BoxLayout.prototype.onBeforeAttach = function (msg) {\r\n _super.prototype.onBeforeAttach.call(this, msg);\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-shown'` message.\r\n */\r\n BoxLayout.prototype.onChildShown = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-hidden'` message.\r\n */\r\n BoxLayout.prototype.onChildHidden = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'resize'` message.\r\n */\r\n BoxLayout.prototype.onResize = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(msg.width, msg.height);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n */\r\n BoxLayout.prototype.onUpdateRequest = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(-1, -1);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'fit-request'` message.\r\n */\r\n BoxLayout.prototype.onFitRequest = function (msg) {\r\n if (this.parent.isAttached) {\r\n this._fit();\r\n }\r\n };\r\n /**\r\n * Fit the layout to the total size required by the widgets.\r\n */\r\n BoxLayout.prototype._fit = function () {\r\n // Compute the visible item count.\r\n var nVisible = 0;\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n nVisible += +!this._items[i].isHidden;\r\n }\r\n // Update the fixed space for the visible items.\r\n this._fixed = this._spacing * Math.max(0, nVisible - 1);\r\n // Setup the computed minimum size.\r\n var horz = Private.isHorizontal(this._direction);\r\n var minW = horz ? this._fixed : 0;\r\n var minH = horz ? 0 : this._fixed;\r\n // Update the sizers and computed minimum size.\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n // Fetch the item and corresponding box sizer.\r\n var item = this._items[i];\r\n var sizer = this._sizers[i];\r\n // If the item is hidden, it should consume zero size.\r\n if (item.isHidden) {\r\n sizer.minSize = 0;\r\n sizer.maxSize = 0;\r\n continue;\r\n }\r\n // Update the size limits for the item.\r\n item.fit();\r\n // Update the size basis and stretch factor.\r\n sizer.sizeHint = BoxLayout.getSizeBasis(item.widget);\r\n sizer.stretch = BoxLayout.getStretch(item.widget);\r\n // Update the sizer limits and computed min size.\r\n if (horz) {\r\n sizer.minSize = item.minWidth;\r\n sizer.maxSize = item.maxWidth;\r\n minW += item.minWidth;\r\n minH = Math.max(minH, item.minHeight);\r\n }\r\n else {\r\n sizer.minSize = item.minHeight;\r\n sizer.maxSize = item.maxHeight;\r\n minH += item.minHeight;\r\n minW = Math.max(minW, item.minWidth);\r\n }\r\n }\r\n // Update the box sizing and add it to the computed min size.\r\n var box = this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n minW += box.horizontalSum;\r\n minH += box.verticalSum;\r\n // Update the parent's min size constraints.\r\n var style = this.parent.node.style;\r\n style.minWidth = minW + \"px\";\r\n style.minHeight = minH + \"px\";\r\n // Set the dirty flag to ensure only a single update occurs.\r\n this._dirty = true;\r\n // Notify the ancestor that it should fit immediately. This may\r\n // cause a resize of the parent, fulfilling the required update.\r\n if (this.parent.parent) {\r\n messaging_1.MessageLoop.sendMessage(this.parent.parent, widget_1.Widget.Msg.FitRequest);\r\n }\r\n // If the dirty flag is still set, the parent was not resized.\r\n // Trigger the required update on the parent widget immediately.\r\n if (this._dirty) {\r\n messaging_1.MessageLoop.sendMessage(this.parent, widget_1.Widget.Msg.UpdateRequest);\r\n }\r\n };\r\n /**\r\n * Update the layout position and size of the widgets.\r\n *\r\n * The parent offset dimensions should be `-1` if unknown.\r\n */\r\n BoxLayout.prototype._update = function (offsetWidth, offsetHeight) {\r\n // Clear the dirty flag to indicate the update occurred.\r\n this._dirty = false;\r\n // Compute the visible item count.\r\n var nVisible = 0;\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n nVisible += +!this._items[i].isHidden;\r\n }\r\n // Bail early if there are no visible items to layout.\r\n if (nVisible === 0) {\r\n return;\r\n }\r\n // Measure the parent if the offset dimensions are unknown.\r\n if (offsetWidth < 0) {\r\n offsetWidth = this.parent.node.offsetWidth;\r\n }\r\n if (offsetHeight < 0) {\r\n offsetHeight = this.parent.node.offsetHeight;\r\n }\r\n // Ensure the parent box sizing data is computed.\r\n if (!this._box) {\r\n this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n }\r\n // Compute the layout area adjusted for border and padding.\r\n var top = this._box.paddingTop;\r\n var left = this._box.paddingLeft;\r\n var width = offsetWidth - this._box.horizontalSum;\r\n var height = offsetHeight - this._box.verticalSum;\r\n // Distribute the layout space and adjust the start position.\r\n var delta;\r\n switch (this._direction) {\r\n case 'left-to-right':\r\n delta = boxengine_1.BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\r\n break;\r\n case 'top-to-bottom':\r\n delta = boxengine_1.BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\r\n break;\r\n case 'right-to-left':\r\n delta = boxengine_1.BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\r\n left += width;\r\n break;\r\n case 'bottom-to-top':\r\n delta = boxengine_1.BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\r\n top += height;\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n // Setup the variables for justification and alignment offset.\r\n var extra = 0;\r\n var offset = 0;\r\n // Account for alignment if there is extra layout space.\r\n if (delta > 0) {\r\n switch (this._alignment) {\r\n case 'start':\r\n break;\r\n case 'center':\r\n extra = 0;\r\n offset = delta / 2;\r\n break;\r\n case 'end':\r\n extra = 0;\r\n offset = delta;\r\n break;\r\n case 'justify':\r\n extra = delta / nVisible;\r\n offset = 0;\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n }\r\n // Layout the items using the computed box sizes.\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n // Fetch the item.\r\n var item = this._items[i];\r\n // Ignore hidden items.\r\n if (item.isHidden) {\r\n continue;\r\n }\r\n // Fetch the computed size for the widget.\r\n var size = this._sizers[i].size;\r\n // Update the widget geometry and advance the relevant edge.\r\n switch (this._direction) {\r\n case 'left-to-right':\r\n item.update(left + offset, top, size + extra, height);\r\n left += size + extra + this._spacing;\r\n break;\r\n case 'top-to-bottom':\r\n item.update(left, top + offset, width, size + extra);\r\n top += size + extra + this._spacing;\r\n break;\r\n case 'right-to-left':\r\n item.update(left - offset - size - extra, top, size + extra, height);\r\n left -= size + extra + this._spacing;\r\n break;\r\n case 'bottom-to-top':\r\n item.update(left, top - offset - size - extra, width, size + extra);\r\n top -= size + extra + this._spacing;\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n }\r\n };\r\n return BoxLayout;\r\n}(panellayout_1.PanelLayout));\r\nexports.BoxLayout = BoxLayout;\r\n/**\r\n * The namespace for the `BoxLayout` class statics.\r\n */\r\n(function (BoxLayout) {\r\n /**\r\n * Get the box layout stretch factor for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The box layout stretch factor for the widget.\r\n */\r\n function getStretch(widget) {\r\n return Private.stretchProperty.get(widget);\r\n }\r\n BoxLayout.getStretch = getStretch;\r\n /**\r\n * Set the box layout stretch factor for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param value - The value for the stretch factor.\r\n */\r\n function setStretch(widget, value) {\r\n Private.stretchProperty.set(widget, value);\r\n }\r\n BoxLayout.setStretch = setStretch;\r\n /**\r\n * Get the box layout size basis for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The box layout size basis for the widget.\r\n */\r\n function getSizeBasis(widget) {\r\n return Private.sizeBasisProperty.get(widget);\r\n }\r\n BoxLayout.getSizeBasis = getSizeBasis;\r\n /**\r\n * Set the box layout size basis for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param value - The value for the size basis.\r\n */\r\n function setSizeBasis(widget, value) {\r\n Private.sizeBasisProperty.set(widget, value);\r\n }\r\n BoxLayout.setSizeBasis = setSizeBasis;\r\n})(BoxLayout = exports.BoxLayout || (exports.BoxLayout = {}));\r\nexports.BoxLayout = BoxLayout;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * The property descriptor for a widget stretch factor.\r\n */\r\n Private.stretchProperty = new properties_1.AttachedProperty({\r\n name: 'stretch',\r\n create: function () { return 0; },\r\n coerce: function (owner, value) { return Math.max(0, Math.floor(value)); },\r\n changed: onChildSizingChanged\r\n });\r\n /**\r\n * The property descriptor for a widget size basis.\r\n */\r\n Private.sizeBasisProperty = new properties_1.AttachedProperty({\r\n name: 'sizeBasis',\r\n create: function () { return 0; },\r\n coerce: function (owner, value) { return Math.max(0, Math.floor(value)); },\r\n changed: onChildSizingChanged\r\n });\r\n /**\r\n * Test whether a direction has horizontal orientation.\r\n */\r\n function isHorizontal(dir) {\r\n return dir === 'left-to-right' || dir === 'right-to-left';\r\n }\r\n Private.isHorizontal = isHorizontal;\r\n /**\r\n * Clamp a spacing value to an integer >= 0.\r\n */\r\n function clampSpacing(value) {\r\n return Math.max(0, Math.floor(value));\r\n }\r\n Private.clampSpacing = clampSpacing;\r\n /**\r\n * The change handler for the attached sizing properties.\r\n */\r\n function onChildSizingChanged(child) {\r\n if (child.parent && child.parent.layout instanceof BoxLayout) {\r\n child.parent.fit();\r\n }\r\n }\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\n/**\r\n * An object which holds data related to an object's title.\r\n *\r\n * #### Notes\r\n * A title object is intended to hold the data necessary to display a\r\n * header for a particular object. A common example is the `TabPanel`,\r\n * which uses the widget title to populate the tab for a child widget.\r\n */\r\nvar Title = /** @class */ (function () {\r\n /**\r\n * Construct a new title.\r\n *\r\n * @param options - The options for initializing the title.\r\n */\r\n function Title(options) {\r\n this._label = '';\r\n this._caption = '';\r\n this._mnemonic = -1;\r\n this._iconClass = '';\r\n this._iconLabel = '';\r\n this._className = '';\r\n this._closable = false;\r\n this._changed = new signaling_1.Signal(this);\r\n this.owner = options.owner;\r\n if (options.label !== undefined) {\r\n this._label = options.label;\r\n }\r\n if (options.mnemonic !== undefined) {\r\n this._mnemonic = options.mnemonic;\r\n }\r\n if (options.icon !== undefined) {\r\n this._iconClass = options.icon;\r\n }\r\n if (options.iconClass !== undefined) {\r\n this._iconClass = options.iconClass;\r\n }\r\n if (options.iconLabel !== undefined) {\r\n this._iconLabel = options.iconLabel;\r\n }\r\n if (options.caption !== undefined) {\r\n this._caption = options.caption;\r\n }\r\n if (options.className !== undefined) {\r\n this._className = options.className;\r\n }\r\n if (options.closable !== undefined) {\r\n this._closable = options.closable;\r\n }\r\n this._dataset = options.dataset || {};\r\n }\r\n Object.defineProperty(Title.prototype, \"changed\", {\r\n /**\r\n * A signal emitted when the state of the title changes.\r\n */\r\n get: function () {\r\n return this._changed;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Title.prototype, \"label\", {\r\n /**\r\n * Get the label for the title.\r\n *\r\n * #### Notes\r\n * The default value is an empty string.\r\n */\r\n get: function () {\r\n return this._label;\r\n },\r\n /**\r\n * Set the label for the title.\r\n */\r\n set: function (value) {\r\n if (this._label === value) {\r\n return;\r\n }\r\n this._label = value;\r\n this._changed.emit(undefined);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Title.prototype, \"mnemonic\", {\r\n /**\r\n * Get the mnemonic index for the title.\r\n *\r\n * #### Notes\r\n * The default value is `-1`.\r\n */\r\n get: function () {\r\n return this._mnemonic;\r\n },\r\n /**\r\n * Set the mnemonic index for the title.\r\n */\r\n set: function (value) {\r\n if (this._mnemonic === value) {\r\n return;\r\n }\r\n this._mnemonic = value;\r\n this._changed.emit(undefined);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Title.prototype, \"icon\", {\r\n /**\r\n * @deprecated Use `iconClass` instead.\r\n */\r\n get: function () {\r\n return this.iconClass;\r\n },\r\n /**\r\n * @deprecated Use `iconClass` instead.\r\n */\r\n set: function (value) {\r\n this.iconClass = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Title.prototype, \"iconClass\", {\r\n /**\r\n * Get the icon class name for the title.\r\n *\r\n * #### Notes\r\n * The default value is an empty string.\r\n */\r\n get: function () {\r\n return this._iconClass;\r\n },\r\n /**\r\n * Set the icon class name for the title.\r\n *\r\n * #### Notes\r\n * Multiple class names can be separated with whitespace.\r\n */\r\n set: function (value) {\r\n if (this._iconClass === value) {\r\n return;\r\n }\r\n this._iconClass = value;\r\n this._changed.emit(undefined);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Title.prototype, \"iconLabel\", {\r\n /**\r\n * Get the icon label for the title.\r\n *\r\n * #### Notes\r\n * The default value is an empty string.\r\n */\r\n get: function () {\r\n return this._iconLabel;\r\n },\r\n /**\r\n * Set the icon label for the title.\r\n *\r\n * #### Notes\r\n * Multiple class names can be separated with whitespace.\r\n */\r\n set: function (value) {\r\n if (this._iconLabel === value) {\r\n return;\r\n }\r\n this._iconLabel = value;\r\n this._changed.emit(undefined);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Title.prototype, \"caption\", {\r\n /**\r\n * Get the caption for the title.\r\n *\r\n * #### Notes\r\n * The default value is an empty string.\r\n */\r\n get: function () {\r\n return this._caption;\r\n },\r\n /**\r\n * Set the caption for the title.\r\n */\r\n set: function (value) {\r\n if (this._caption === value) {\r\n return;\r\n }\r\n this._caption = value;\r\n this._changed.emit(undefined);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Title.prototype, \"className\", {\r\n /**\r\n * Get the extra class name for the title.\r\n *\r\n * #### Notes\r\n * The default value is an empty string.\r\n */\r\n get: function () {\r\n return this._className;\r\n },\r\n /**\r\n * Set the extra class name for the title.\r\n *\r\n * #### Notes\r\n * Multiple class names can be separated with whitespace.\r\n */\r\n set: function (value) {\r\n if (this._className === value) {\r\n return;\r\n }\r\n this._className = value;\r\n this._changed.emit(undefined);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Title.prototype, \"closable\", {\r\n /**\r\n * Get the closable state for the title.\r\n *\r\n * #### Notes\r\n * The default value is `false`.\r\n */\r\n get: function () {\r\n return this._closable;\r\n },\r\n /**\r\n * Set the closable state for the title.\r\n *\r\n * #### Notes\r\n * This controls the presence of a close icon when applicable.\r\n */\r\n set: function (value) {\r\n if (this._closable === value) {\r\n return;\r\n }\r\n this._closable = value;\r\n this._changed.emit(undefined);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Title.prototype, \"dataset\", {\r\n /**\r\n * Get the dataset for the title.\r\n *\r\n * #### Notes\r\n * The default value is an empty dataset.\r\n */\r\n get: function () {\r\n return this._dataset;\r\n },\r\n /**\r\n * Set the dataset for the title.\r\n *\r\n * #### Notes\r\n * This controls the data attributes when applicable.\r\n */\r\n set: function (value) {\r\n if (this._dataset === value) {\r\n return;\r\n }\r\n this._dataset = value;\r\n this._changed.emit(undefined);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Title;\r\n}());\r\nexports.Title = Title;\r\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n var r = getr(priv);\n var blinder = r.toRed(bn.mont(priv.modulus))\n .redPow(new bn(priv.publicExponent)).fromRed();\n return {\n blinder: blinder,\n unblinder:r.invm(priv.modulus)\n };\n}\nfunction crt(msg, priv) {\n var blinds = blind(priv);\n var len = priv.modulus.byteLength();\n var mod = bn.mont(priv.modulus);\n var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n var c1 = blinded.toRed(bn.mont(priv.prime1));\n var c2 = blinded.toRed(bn.mont(priv.prime2));\n var qinv = priv.coefficient;\n var p = priv.prime1;\n var q = priv.prime2;\n var m1 = c1.redPow(priv.exponent1);\n var m2 = c2.redPow(priv.exponent2);\n m1 = m1.fromRed();\n m2 = m2.fromRed();\n var h = m1.isub(m2).imul(qinv).umod(p);\n h.imul(q);\n m2.iadd(h);\n return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n var len = priv.modulus.byteLength();\n var r = new bn(randomBytes(len));\n while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n r = new bn(randomBytes(len));\n }\n return r;\n}\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\n/**\r\n * A disposable object which delegates to a callback function.\r\n */\r\nvar DisposableDelegate = /** @class */ (function () {\r\n /**\r\n * Construct a new disposable delegate.\r\n *\r\n * @param fn - The callback function to invoke on dispose.\r\n */\r\n function DisposableDelegate(fn) {\r\n this._fn = fn;\r\n }\r\n Object.defineProperty(DisposableDelegate.prototype, \"isDisposed\", {\r\n /**\r\n * Test whether the delegate has been disposed.\r\n */\r\n get: function () {\r\n return !this._fn;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Dispose of the delegate and invoke the callback function.\r\n */\r\n DisposableDelegate.prototype.dispose = function () {\r\n if (!this._fn) {\r\n return;\r\n }\r\n var fn = this._fn;\r\n this._fn = null;\r\n fn();\r\n };\r\n return DisposableDelegate;\r\n}());\r\nexports.DisposableDelegate = DisposableDelegate;\r\n/**\r\n * An observable disposable object which delegates to a callback function.\r\n */\r\nvar ObservableDisposableDelegate = /** @class */ (function (_super) {\r\n __extends(ObservableDisposableDelegate, _super);\r\n function ObservableDisposableDelegate() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this._disposed = new signaling_1.Signal(_this);\r\n return _this;\r\n }\r\n Object.defineProperty(ObservableDisposableDelegate.prototype, \"disposed\", {\r\n /**\r\n * A signal emitted when the delegate is disposed.\r\n */\r\n get: function () {\r\n return this._disposed;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Dispose of the delegate and invoke the callback function.\r\n */\r\n ObservableDisposableDelegate.prototype.dispose = function () {\r\n if (this.isDisposed) {\r\n return;\r\n }\r\n _super.prototype.dispose.call(this);\r\n this._disposed.emit(undefined);\r\n signaling_1.Signal.clearData(this);\r\n };\r\n return ObservableDisposableDelegate;\r\n}(DisposableDelegate));\r\nexports.ObservableDisposableDelegate = ObservableDisposableDelegate;\r\n/**\r\n * An object which manages a collection of disposable items.\r\n */\r\nvar DisposableSet = /** @class */ (function () {\r\n /**\r\n * Construct a new disposable set.\r\n */\r\n function DisposableSet() {\r\n this._isDisposed = false;\r\n this._items = new Set();\r\n }\r\n Object.defineProperty(DisposableSet.prototype, \"isDisposed\", {\r\n /**\r\n * Test whether the set has been disposed.\r\n */\r\n get: function () {\r\n return this._isDisposed;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Dispose of the set and the items it contains.\r\n *\r\n * #### Notes\r\n * Items are disposed in the order they are added to the set.\r\n */\r\n DisposableSet.prototype.dispose = function () {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n this._isDisposed = true;\r\n this._items.forEach(function (item) { item.dispose(); });\r\n this._items.clear();\r\n };\r\n /**\r\n * Test whether the set contains a specific item.\r\n *\r\n * @param item - The item of interest.\r\n *\r\n * @returns `true` if the set contains the item, `false` otherwise.\r\n */\r\n DisposableSet.prototype.contains = function (item) {\r\n return this._items.has(item);\r\n };\r\n /**\r\n * Add a disposable item to the set.\r\n *\r\n * @param item - The item to add to the set.\r\n *\r\n * #### Notes\r\n * If the item is already contained in the set, this is a no-op.\r\n */\r\n DisposableSet.prototype.add = function (item) {\r\n this._items.add(item);\r\n };\r\n /**\r\n * Remove a disposable item from the set.\r\n *\r\n * @param item - The item to remove from the set.\r\n *\r\n * #### Notes\r\n * If the item is not contained in the set, this is a no-op.\r\n */\r\n DisposableSet.prototype.remove = function (item) {\r\n this._items.delete(item);\r\n };\r\n /**\r\n * Remove all items from the set.\r\n */\r\n DisposableSet.prototype.clear = function () {\r\n this._items.clear();\r\n };\r\n return DisposableSet;\r\n}());\r\nexports.DisposableSet = DisposableSet;\r\n/**\r\n * The namespace for the `DisposableSet` class statics.\r\n */\r\n(function (DisposableSet) {\r\n /**\r\n * Create a disposable set from an iterable of items.\r\n *\r\n * @param items - The iterable or array-like object of interest.\r\n *\r\n * @returns A new disposable initialized with the given items.\r\n */\r\n function from(items) {\r\n var set = new DisposableSet();\r\n algorithm_1.each(items, function (item) { set.add(item); });\r\n return set;\r\n }\r\n DisposableSet.from = from;\r\n})(DisposableSet = exports.DisposableSet || (exports.DisposableSet = {}));\r\nexports.DisposableSet = DisposableSet;\r\n/**\r\n * An observable object which manages a collection of disposable items.\r\n */\r\nvar ObservableDisposableSet = /** @class */ (function (_super) {\r\n __extends(ObservableDisposableSet, _super);\r\n function ObservableDisposableSet() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this._disposed = new signaling_1.Signal(_this);\r\n return _this;\r\n }\r\n Object.defineProperty(ObservableDisposableSet.prototype, \"disposed\", {\r\n /**\r\n * A signal emitted when the set is disposed.\r\n */\r\n get: function () {\r\n return this._disposed;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Dispose of the set and the items it contains.\r\n *\r\n * #### Notes\r\n * Items are disposed in the order they are added to the set.\r\n */\r\n ObservableDisposableSet.prototype.dispose = function () {\r\n if (this.isDisposed) {\r\n return;\r\n }\r\n _super.prototype.dispose.call(this);\r\n this._disposed.emit(undefined);\r\n signaling_1.Signal.clearData(this);\r\n };\r\n return ObservableDisposableSet;\r\n}(DisposableSet));\r\nexports.ObservableDisposableSet = ObservableDisposableSet;\r\n/**\r\n * The namespace for the `ObservableDisposableSet` class statics.\r\n */\r\n(function (ObservableDisposableSet) {\r\n /**\r\n * Create an observable disposable set from an iterable of items.\r\n *\r\n * @param items - The iterable or array-like object of interest.\r\n *\r\n * @returns A new disposable initialized with the given items.\r\n */\r\n function from(items) {\r\n var set = new ObservableDisposableSet();\r\n algorithm_1.each(items, function (item) { set.add(item); });\r\n return set;\r\n }\r\n ObservableDisposableSet.from = from;\r\n})(ObservableDisposableSet = exports.ObservableDisposableSet || (exports.ObservableDisposableSet = {}));\r\nexports.ObservableDisposableSet = ObservableDisposableSet;\r\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Get the global application keyboard layout instance.\n *\n * @returns The keyboard layout for use by the application.\n *\n * #### Notes\n * The default keyboard layout is US-English.\n */\nfunction getKeyboardLayout() {\n return Private.keyboardLayout;\n}\nexports.getKeyboardLayout = getKeyboardLayout;\n/**\n * Set the global application keyboard layout instance.\n *\n * @param - The keyboard layout for use by the application.\n *\n * #### Notes\n * The keyboard layout should typically be set on application startup\n * to a layout which is appropriate for the user's system.\n */\nfunction setKeyboardLayout(layout) {\n Private.keyboardLayout = layout;\n}\nexports.setKeyboardLayout = setKeyboardLayout;\n/**\n * A concrete implementation of [[IKeyboardLayout]] based on keycodes.\n *\n * The `keyCode` property of a `'keydown'` event is a browser and OS\n * specific representation of the physical key (not character) which\n * was pressed on a keyboard. While not the most convenient API, it\n * is currently the only one which works reliably on all browsers.\n *\n * This class accepts a user-defined mapping of keycode to key, which\n * allows for reliable shortcuts tailored to the user's system.\n */\nvar KeycodeLayout = /** @class */ (function () {\n /**\n * Construct a new keycode layout.\n *\n * @param name - The human readable name for the layout.\n *\n * @param codes - A mapping of keycode to key value.\n */\n function KeycodeLayout(name, codes) {\n this.name = name;\n this._codes = codes;\n this._keys = KeycodeLayout.extractKeys(codes);\n }\n /**\n * Get an array of the key values supported by the layout.\n *\n * @returns A new array of the supported key values.\n */\n KeycodeLayout.prototype.keys = function () {\n return Object.keys(this._keys);\n };\n /**\n * Test whether the given key is a valid value for the layout.\n *\n * @param key - The user provided key to test for validity.\n *\n * @returns `true` if the key is valid, `false` otherwise.\n */\n KeycodeLayout.prototype.isValidKey = function (key) {\n return key in this._keys;\n };\n /**\n * Get the key for a `'keydown'` event.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns The associated key value, or an empty string if\n * the event does not represent a valid primary key.\n */\n KeycodeLayout.prototype.keyForKeydownEvent = function (event) {\n return this._codes[event.keyCode] || '';\n };\n return KeycodeLayout;\n}());\nexports.KeycodeLayout = KeycodeLayout;\n/**\n * The namespace for the `KeycodeLayout` class statics.\n */\n(function (KeycodeLayout) {\n /**\n * Extract the set of keys from a code map.\n *\n * @param code - The code map of interest.\n *\n * @returns A set of the keys in the code map.\n */\n function extractKeys(codes) {\n var keys = Object.create(null);\n for (var c in codes) {\n keys[codes[c]] = true;\n }\n return keys;\n }\n KeycodeLayout.extractKeys = extractKeys;\n})(KeycodeLayout = exports.KeycodeLayout || (exports.KeycodeLayout = {}));\nexports.KeycodeLayout = KeycodeLayout;\n/**\n * A keycode-based keyboard layout for US English keyboards.\n *\n * This layout is valid for the following OS/Browser combinations.\n *\n * - Windows\n * - Chrome\n * - Firefox\n * - IE\n *\n * - OSX\n * - Chrome\n * - Firefox\n * - Safari\n *\n * - Linux\n * - Chrome\n * - Firefox\n *\n * Other combinations may also work, but are untested.\n */\nexports.EN_US = new KeycodeLayout('en-us', {\n 8: 'Backspace',\n 9: 'Tab',\n 13: 'Enter',\n 19: 'Pause',\n 27: 'Escape',\n 32: 'Space',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'A',\n 66: 'B',\n 67: 'C',\n 68: 'D',\n 69: 'E',\n 70: 'F',\n 71: 'G',\n 72: 'H',\n 73: 'I',\n 74: 'J',\n 75: 'K',\n 76: 'L',\n 77: 'M',\n 78: 'N',\n 79: 'O',\n 80: 'P',\n 81: 'Q',\n 82: 'R',\n 83: 'S',\n 84: 'T',\n 85: 'U',\n 86: 'V',\n 87: 'W',\n 88: 'X',\n 89: 'Y',\n 90: 'Z',\n 93: 'ContextMenu',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9',\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111: '/',\n 112: 'F1',\n 113: 'F2',\n 114: 'F3',\n 115: 'F4',\n 116: 'F5',\n 117: 'F6',\n 118: 'F7',\n 119: 'F8',\n 120: 'F9',\n 121: 'F10',\n 122: 'F11',\n 123: 'F12',\n 173: '-',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n});\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The global keyboard layout instance.\n */\n Private.keyboardLayout = exports.EN_US;\n})(Private || (Private = {}));\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar dragdrop_1 = require(\"@phosphor/dragdrop\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\nvar virtualdom_1 = require(\"@phosphor/virtualdom\");\r\nvar title_1 = require(\"./title\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A widget which displays titles as a single row or column of tabs.\r\n *\r\n * #### Notes\r\n * If CSS transforms are used to rotate nodes for vertically oriented\r\n * text, then tab dragging will not work correctly. The `tabsMovable`\r\n * property should be set to `false` when rotating nodes from CSS.\r\n */\r\nvar TabBar = /** @class */ (function (_super) {\r\n __extends(TabBar, _super);\r\n /**\r\n * Construct a new tab bar.\r\n *\r\n * @param options - The options for initializing the tab bar.\r\n */\r\n function TabBar(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, { node: Private.createNode() }) || this;\r\n _this._currentIndex = -1;\r\n _this._titles = [];\r\n _this._previousTitle = null;\r\n _this._dragData = null;\r\n _this._tabMoved = new signaling_1.Signal(_this);\r\n _this._currentChanged = new signaling_1.Signal(_this);\r\n _this._tabCloseRequested = new signaling_1.Signal(_this);\r\n _this._tabDetachRequested = new signaling_1.Signal(_this);\r\n _this._tabActivateRequested = new signaling_1.Signal(_this);\r\n _this.addClass('p-TabBar');\r\n _this.setFlag(widget_1.Widget.Flag.DisallowLayout);\r\n _this.tabsMovable = options.tabsMovable || false;\r\n _this.allowDeselect = options.allowDeselect || false;\r\n _this.insertBehavior = options.insertBehavior || 'select-tab-if-needed';\r\n _this.removeBehavior = options.removeBehavior || 'select-tab-after';\r\n _this.renderer = options.renderer || TabBar.defaultRenderer;\r\n _this._orientation = options.orientation || 'horizontal';\r\n _this.dataset['orientation'] = _this._orientation;\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the widget.\r\n */\r\n TabBar.prototype.dispose = function () {\r\n this._releaseMouse();\r\n this._titles.length = 0;\r\n this._previousTitle = null;\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(TabBar.prototype, \"currentChanged\", {\r\n /**\r\n * A signal emitted when the current tab is changed.\r\n *\r\n * #### Notes\r\n * This signal is emitted when the currently selected tab is changed\r\n * either through user or programmatic interaction.\r\n *\r\n * Notably, this signal is not emitted when the index of the current\r\n * tab changes due to tabs being inserted, removed, or moved. It is\r\n * only emitted when the actual current tab node is changed.\r\n */\r\n get: function () {\r\n return this._currentChanged;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabBar.prototype, \"tabMoved\", {\r\n /**\r\n * A signal emitted when a tab is moved by the user.\r\n *\r\n * #### Notes\r\n * This signal is emitted when a tab is moved by user interaction.\r\n *\r\n * This signal is not emitted when a tab is moved programmatically.\r\n */\r\n get: function () {\r\n return this._tabMoved;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabBar.prototype, \"tabActivateRequested\", {\r\n /**\r\n * A signal emitted when a tab is clicked by the user.\r\n *\r\n * #### Notes\r\n * If the clicked tab is not the current tab, the clicked tab will be\r\n * made current and the `currentChanged` signal will be emitted first.\r\n *\r\n * This signal is emitted even if the clicked tab is the current tab.\r\n */\r\n get: function () {\r\n return this._tabActivateRequested;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabBar.prototype, \"tabCloseRequested\", {\r\n /**\r\n * A signal emitted when a tab close icon is clicked.\r\n *\r\n * #### Notes\r\n * This signal is not emitted unless the tab title is `closable`.\r\n */\r\n get: function () {\r\n return this._tabCloseRequested;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabBar.prototype, \"tabDetachRequested\", {\r\n /**\r\n * A signal emitted when a tab is dragged beyond the detach threshold.\r\n *\r\n * #### Notes\r\n * This signal is emitted when the user drags a tab with the mouse,\r\n * and mouse is dragged beyond the detach threshold.\r\n *\r\n * The consumer of the signal should call `releaseMouse` and remove\r\n * the tab in order to complete the detach.\r\n *\r\n * This signal is only emitted once per drag cycle.\r\n */\r\n get: function () {\r\n return this._tabDetachRequested;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabBar.prototype, \"currentTitle\", {\r\n /**\r\n * Get the currently selected title.\r\n *\r\n * #### Notes\r\n * This will be `null` if no tab is selected.\r\n */\r\n get: function () {\r\n return this._titles[this._currentIndex] || null;\r\n },\r\n /**\r\n * Set the currently selected title.\r\n *\r\n * #### Notes\r\n * If the title does not exist, the title will be set to `null`.\r\n */\r\n set: function (value) {\r\n this.currentIndex = value ? this._titles.indexOf(value) : -1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabBar.prototype, \"currentIndex\", {\r\n /**\r\n * Get the index of the currently selected tab.\r\n *\r\n * #### Notes\r\n * This will be `-1` if no tab is selected.\r\n */\r\n get: function () {\r\n return this._currentIndex;\r\n },\r\n /**\r\n * Set the index of the currently selected tab.\r\n *\r\n * #### Notes\r\n * If the value is out of range, the index will be set to `-1`.\r\n */\r\n set: function (value) {\r\n // Adjust for an out of range index.\r\n if (value < 0 || value >= this._titles.length) {\r\n value = -1;\r\n }\r\n // Bail early if the index will not change.\r\n if (this._currentIndex === value) {\r\n return;\r\n }\r\n // Look up the previous index and title.\r\n var pi = this._currentIndex;\r\n var pt = this._titles[pi] || null;\r\n // Look up the current index and title.\r\n var ci = value;\r\n var ct = this._titles[ci] || null;\r\n // Update the current index and previous title.\r\n this._currentIndex = ci;\r\n this._previousTitle = pt;\r\n // Schedule an update of the tabs.\r\n this.update();\r\n // Emit the current changed signal.\r\n this._currentChanged.emit({\r\n previousIndex: pi, previousTitle: pt,\r\n currentIndex: ci, currentTitle: ct\r\n });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabBar.prototype, \"orientation\", {\r\n /**\r\n * Get the orientation of the tab bar.\r\n *\r\n * #### Notes\r\n * This controls whether the tabs are arranged in a row or column.\r\n */\r\n get: function () {\r\n return this._orientation;\r\n },\r\n /**\r\n * Set the orientation of the tab bar.\r\n *\r\n * #### Notes\r\n * This controls whether the tabs are arranged in a row or column.\r\n */\r\n set: function (value) {\r\n // Do nothing if the orientation does not change.\r\n if (this._orientation === value) {\r\n return;\r\n }\r\n // Release the mouse before making any changes.\r\n this._releaseMouse();\r\n // Toggle the orientation values.\r\n this._orientation = value;\r\n this.dataset['orientation'] = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabBar.prototype, \"titles\", {\r\n /**\r\n * A read-only array of the titles in the tab bar.\r\n */\r\n get: function () {\r\n return this._titles;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabBar.prototype, \"contentNode\", {\r\n /**\r\n * The tab bar content node.\r\n *\r\n * #### Notes\r\n * This is the node which holds the tab nodes.\r\n *\r\n * Modifying this node directly can lead to undefined behavior.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-TabBar-content')[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Add a tab to the end of the tab bar.\r\n *\r\n * @param value - The title which holds the data for the tab,\r\n * or an options object to convert to a title.\r\n *\r\n * @returns The title object added to the tab bar.\r\n *\r\n * #### Notes\r\n * If the title is already added to the tab bar, it will be moved.\r\n */\r\n TabBar.prototype.addTab = function (value) {\r\n return this.insertTab(this._titles.length, value);\r\n };\r\n /**\r\n * Insert a tab into the tab bar at the specified index.\r\n *\r\n * @param index - The index at which to insert the tab.\r\n *\r\n * @param value - The title which holds the data for the tab,\r\n * or an options object to convert to a title.\r\n *\r\n * @returns The title object added to the tab bar.\r\n *\r\n * #### Notes\r\n * The index will be clamped to the bounds of the tabs.\r\n *\r\n * If the title is already added to the tab bar, it will be moved.\r\n */\r\n TabBar.prototype.insertTab = function (index, value) {\r\n // Release the mouse before making any changes.\r\n this._releaseMouse();\r\n // Coerce the value to a title.\r\n var title = Private.asTitle(value);\r\n // Look up the index of the title.\r\n var i = this._titles.indexOf(title);\r\n // Clamp the insert index to the array bounds.\r\n var j = Math.max(0, Math.min(index, this._titles.length));\r\n // If the title is not in the array, insert it.\r\n if (i === -1) {\r\n // Insert the title into the array.\r\n algorithm_1.ArrayExt.insert(this._titles, j, title);\r\n // Connect to the title changed signal.\r\n title.changed.connect(this._onTitleChanged, this);\r\n // Schedule an update of the tabs.\r\n this.update();\r\n // Adjust the current index for the insert.\r\n this._adjustCurrentForInsert(j, title);\r\n // Return the title added to the tab bar.\r\n return title;\r\n }\r\n // Otherwise, the title exists in the array and should be moved.\r\n // Adjust the index if the location is at the end of the array.\r\n if (j === this._titles.length) {\r\n j--;\r\n }\r\n // Bail if there is no effective move.\r\n if (i === j) {\r\n return title;\r\n }\r\n // Move the title to the new location.\r\n algorithm_1.ArrayExt.move(this._titles, i, j);\r\n // Schedule an update of the tabs.\r\n this.update();\r\n // Adjust the current index for the move.\r\n this._adjustCurrentForMove(i, j);\r\n // Return the title added to the tab bar.\r\n return title;\r\n };\r\n /**\r\n * Remove a tab from the tab bar.\r\n *\r\n * @param title - The title for the tab to remove.\r\n *\r\n * #### Notes\r\n * This is a no-op if the title is not in the tab bar.\r\n */\r\n TabBar.prototype.removeTab = function (title) {\r\n this.removeTabAt(this._titles.indexOf(title));\r\n };\r\n /**\r\n * Remove the tab at a given index from the tab bar.\r\n *\r\n * @param index - The index of the tab to remove.\r\n *\r\n * #### Notes\r\n * This is a no-op if the index is out of range.\r\n */\r\n TabBar.prototype.removeTabAt = function (index) {\r\n // Release the mouse before making any changes.\r\n this._releaseMouse();\r\n // Remove the title from the array.\r\n var title = algorithm_1.ArrayExt.removeAt(this._titles, index);\r\n // Bail if the index is out of range.\r\n if (!title) {\r\n return;\r\n }\r\n // Disconnect from the title changed signal.\r\n title.changed.disconnect(this._onTitleChanged, this);\r\n // Clear the previous title if it's being removed.\r\n if (title === this._previousTitle) {\r\n this._previousTitle = null;\r\n }\r\n // Schedule an update of the tabs.\r\n this.update();\r\n // Adjust the current index for the remove.\r\n this._adjustCurrentForRemove(index, title);\r\n };\r\n /**\r\n * Remove all tabs from the tab bar.\r\n */\r\n TabBar.prototype.clearTabs = function () {\r\n // Bail if there is nothing to remove.\r\n if (this._titles.length === 0) {\r\n return;\r\n }\r\n // Release the mouse before making any changes.\r\n this._releaseMouse();\r\n // Disconnect from the title changed signals.\r\n for (var _i = 0, _a = this._titles; _i < _a.length; _i++) {\r\n var title = _a[_i];\r\n title.changed.disconnect(this._onTitleChanged, this);\r\n }\r\n // Get the current index and title.\r\n var pi = this.currentIndex;\r\n var pt = this.currentTitle;\r\n // Reset the current index and previous title.\r\n this._currentIndex = -1;\r\n this._previousTitle = null;\r\n // Clear the title array.\r\n this._titles.length = 0;\r\n // Schedule an update of the tabs.\r\n this.update();\r\n // If no tab was selected, there's nothing else to do.\r\n if (pi === -1) {\r\n return;\r\n }\r\n // Emit the current changed signal.\r\n this._currentChanged.emit({\r\n previousIndex: pi, previousTitle: pt,\r\n currentIndex: -1, currentTitle: null\r\n });\r\n };\r\n /**\r\n * Release the mouse and restore the non-dragged tab positions.\r\n *\r\n * #### Notes\r\n * This will cause the tab bar to stop handling mouse events and to\r\n * restore the tabs to their non-dragged positions.\r\n */\r\n TabBar.prototype.releaseMouse = function () {\r\n this._releaseMouse();\r\n };\r\n /**\r\n * Handle the DOM events for the tab bar.\r\n *\r\n * @param event - The DOM event sent to the tab bar.\r\n *\r\n * #### Notes\r\n * This method implements the DOM `EventListener` interface and is\r\n * called in response to events on the tab bar's DOM node.\r\n *\r\n * This should not be called directly by user code.\r\n */\r\n TabBar.prototype.handleEvent = function (event) {\r\n switch (event.type) {\r\n case 'mousedown':\r\n this._evtMouseDown(event);\r\n break;\r\n case 'mousemove':\r\n this._evtMouseMove(event);\r\n break;\r\n case 'mouseup':\r\n this._evtMouseUp(event);\r\n break;\r\n case 'keydown':\r\n this._evtKeyDown(event);\r\n break;\r\n case 'contextmenu':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n TabBar.prototype.onBeforeAttach = function (msg) {\r\n this.node.addEventListener('mousedown', this);\r\n };\r\n /**\r\n * A message handler invoked on an `'after-detach'` message.\r\n */\r\n TabBar.prototype.onAfterDetach = function (msg) {\r\n this.node.removeEventListener('mousedown', this);\r\n this._releaseMouse();\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n */\r\n TabBar.prototype.onUpdateRequest = function (msg) {\r\n var titles = this._titles;\r\n var renderer = this.renderer;\r\n var currentTitle = this.currentTitle;\r\n var content = new Array(titles.length);\r\n for (var i = 0, n = titles.length; i < n; ++i) {\r\n var title = titles[i];\r\n var current = title === currentTitle;\r\n var zIndex = current ? n : n - i - 1;\r\n content[i] = renderer.renderTab({ title: title, current: current, zIndex: zIndex });\r\n }\r\n virtualdom_1.VirtualDOM.render(content, this.contentNode);\r\n };\r\n /**\r\n * Handle the `'keydown'` event for the tab bar.\r\n */\r\n TabBar.prototype._evtKeyDown = function (event) {\r\n // Stop all input events during drag.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Release the mouse if `Escape` is pressed.\r\n if (event.keyCode === 27) {\r\n this._releaseMouse();\r\n }\r\n };\r\n /**\r\n * Handle the `'mousedown'` event for the tab bar.\r\n */\r\n TabBar.prototype._evtMouseDown = function (event) {\r\n // Do nothing if it's not a left or middle mouse press.\r\n if (event.button !== 0 && event.button !== 1) {\r\n return;\r\n }\r\n // Do nothing if a drag is in progress.\r\n if (this._dragData) {\r\n return;\r\n }\r\n // Lookup the tab nodes.\r\n var tabs = this.contentNode.children;\r\n // Find the index of the pressed tab.\r\n var index = algorithm_1.ArrayExt.findFirstIndex(tabs, function (tab) {\r\n return domutils_1.ElementExt.hitTest(tab, event.clientX, event.clientY);\r\n });\r\n // Do nothing if the press is not on a tab.\r\n if (index === -1) {\r\n return;\r\n }\r\n // Pressing on a tab stops the event propagation.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Initialize the non-measured parts of the drag data.\r\n this._dragData = {\r\n tab: tabs[index],\r\n index: index,\r\n pressX: event.clientX,\r\n pressY: event.clientY,\r\n tabPos: -1,\r\n tabSize: -1,\r\n tabPressPos: -1,\r\n targetIndex: -1,\r\n tabLayout: null,\r\n contentRect: null,\r\n override: null,\r\n dragActive: false,\r\n dragAborted: false,\r\n detachRequested: false\r\n };\r\n // Add the document mouse up listener.\r\n document.addEventListener('mouseup', this, true);\r\n // Do nothing else if the middle button is clicked.\r\n if (event.button === 1) {\r\n return;\r\n }\r\n // Do nothing else if the close icon is clicked.\r\n var icon = tabs[index].querySelector(this.renderer.closeIconSelector);\r\n if (icon && icon.contains(event.target)) {\r\n return;\r\n }\r\n // Add the extra listeners if the tabs are movable.\r\n if (this.tabsMovable) {\r\n document.addEventListener('mousemove', this, true);\r\n document.addEventListener('keydown', this, true);\r\n document.addEventListener('contextmenu', this, true);\r\n }\r\n // Update the current index as appropriate.\r\n if (this.allowDeselect && this.currentIndex === index) {\r\n this.currentIndex = -1;\r\n }\r\n else {\r\n this.currentIndex = index;\r\n }\r\n // Do nothing else if there is no current tab.\r\n if (this.currentIndex === -1) {\r\n return;\r\n }\r\n // Emit the tab activate request signal.\r\n this._tabActivateRequested.emit({\r\n index: this.currentIndex, title: this.currentTitle\r\n });\r\n };\r\n /**\r\n * Handle the `'mousemove'` event for the tab bar.\r\n */\r\n TabBar.prototype._evtMouseMove = function (event) {\r\n // Do nothing if no drag is in progress.\r\n var data = this._dragData;\r\n if (!data) {\r\n return;\r\n }\r\n // Suppress the event during a drag.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Lookup the tab nodes.\r\n var tabs = this.contentNode.children;\r\n // Bail early if the drag threshold has not been met.\r\n if (!data.dragActive && !Private.dragExceeded(data, event)) {\r\n return;\r\n }\r\n // Activate the drag if necessary.\r\n if (!data.dragActive) {\r\n // Fill in the rest of the drag data measurements.\r\n var tabRect = data.tab.getBoundingClientRect();\r\n if (this._orientation === 'horizontal') {\r\n data.tabPos = data.tab.offsetLeft;\r\n data.tabSize = tabRect.width;\r\n data.tabPressPos = data.pressX - tabRect.left;\r\n }\r\n else {\r\n data.tabPos = data.tab.offsetTop;\r\n data.tabSize = tabRect.height;\r\n data.tabPressPos = data.pressY - tabRect.top;\r\n }\r\n data.tabLayout = Private.snapTabLayout(tabs, this._orientation);\r\n data.contentRect = this.contentNode.getBoundingClientRect();\r\n data.override = dragdrop_1.Drag.overrideCursor('default');\r\n // Add the dragging style classes.\r\n data.tab.classList.add('p-mod-dragging');\r\n this.addClass('p-mod-dragging');\r\n // Mark the drag as active.\r\n data.dragActive = true;\r\n }\r\n // Emit the detach requested signal if the threshold is exceeded.\r\n if (!data.detachRequested && Private.detachExceeded(data, event)) {\r\n // Only emit the signal once per drag cycle.\r\n data.detachRequested = true;\r\n // Setup the arguments for the signal.\r\n var index = data.index;\r\n var clientX = event.clientX;\r\n var clientY = event.clientY;\r\n var tab = tabs[index];\r\n var title = this._titles[index];\r\n // Emit the tab detach requested signal.\r\n this._tabDetachRequested.emit({ index: index, title: title, tab: tab, clientX: clientX, clientY: clientY });\r\n // Bail if the signal handler aborted the drag.\r\n if (data.dragAborted) {\r\n return;\r\n }\r\n }\r\n // Update the positions of the tabs.\r\n Private.layoutTabs(tabs, data, event, this._orientation);\r\n };\r\n /**\r\n * Handle the `'mouseup'` event for the document.\r\n */\r\n TabBar.prototype._evtMouseUp = function (event) {\r\n var _this = this;\r\n // Do nothing if it's not a left or middle mouse release.\r\n if (event.button !== 0 && event.button !== 1) {\r\n return;\r\n }\r\n // Do nothing if no drag is in progress.\r\n var data = this._dragData;\r\n if (!data) {\r\n return;\r\n }\r\n // Stop the event propagation.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Remove the extra mouse event listeners.\r\n document.removeEventListener('mousemove', this, true);\r\n document.removeEventListener('mouseup', this, true);\r\n document.removeEventListener('keydown', this, true);\r\n document.removeEventListener('contextmenu', this, true);\r\n // Handle a release when the drag is not active.\r\n if (!data.dragActive) {\r\n // Clear the drag data.\r\n this._dragData = null;\r\n // Lookup the tab nodes.\r\n var tabs = this.contentNode.children;\r\n // Find the index of the released tab.\r\n var index = algorithm_1.ArrayExt.findFirstIndex(tabs, function (tab) {\r\n return domutils_1.ElementExt.hitTest(tab, event.clientX, event.clientY);\r\n });\r\n // Do nothing if the release is not on the original pressed tab.\r\n if (index !== data.index) {\r\n return;\r\n }\r\n // Ignore the release if the title is not closable.\r\n var title = this._titles[index];\r\n if (!title.closable) {\r\n return;\r\n }\r\n // Emit the close requested signal if the middle button is released.\r\n if (event.button === 1) {\r\n this._tabCloseRequested.emit({ index: index, title: title });\r\n return;\r\n }\r\n // Emit the close requested signal if the close icon was released.\r\n var icon = tabs[index].querySelector(this.renderer.closeIconSelector);\r\n if (icon && icon.contains(event.target)) {\r\n this._tabCloseRequested.emit({ index: index, title: title });\r\n return;\r\n }\r\n // Otherwise, there is nothing left to do.\r\n return;\r\n }\r\n // Do nothing if the left button is not released.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Position the tab at its final resting position.\r\n Private.finalizeTabPosition(data, this._orientation);\r\n // Remove the dragging class from the tab so it can be transitioned.\r\n data.tab.classList.remove('p-mod-dragging');\r\n // Parse the transition duration for releasing the tab.\r\n var duration = Private.parseTransitionDuration(data.tab);\r\n // Complete the release on a timer to allow the tab to transition.\r\n setTimeout(function () {\r\n // Do nothing if the drag has been aborted.\r\n if (data.dragAborted) {\r\n return;\r\n }\r\n // Clear the drag data reference.\r\n _this._dragData = null;\r\n // Reset the positions of the tabs.\r\n Private.resetTabPositions(_this.contentNode.children, _this._orientation);\r\n // Clear the cursor grab.\r\n data.override.dispose();\r\n // Remove the remaining dragging style.\r\n _this.removeClass('p-mod-dragging');\r\n // If the tab was not moved, there is nothing else to do.\r\n var i = data.index;\r\n var j = data.targetIndex;\r\n if (j === -1 || i === j) {\r\n return;\r\n }\r\n // Move the title to the new locations.\r\n algorithm_1.ArrayExt.move(_this._titles, i, j);\r\n // Adjust the current index for the move.\r\n _this._adjustCurrentForMove(i, j);\r\n // Emit the tab moved signal.\r\n _this._tabMoved.emit({\r\n fromIndex: i, toIndex: j, title: _this._titles[j]\r\n });\r\n // Update the tabs immediately to prevent flicker.\r\n messaging_1.MessageLoop.sendMessage(_this, widget_1.Widget.Msg.UpdateRequest);\r\n }, duration);\r\n };\r\n /**\r\n * Release the mouse and restore the non-dragged tab positions.\r\n */\r\n TabBar.prototype._releaseMouse = function () {\r\n // Do nothing if no drag is in progress.\r\n var data = this._dragData;\r\n if (!data) {\r\n return;\r\n }\r\n // Clear the drag data reference.\r\n this._dragData = null;\r\n // Remove the extra mouse listeners.\r\n document.removeEventListener('mousemove', this, true);\r\n document.removeEventListener('mouseup', this, true);\r\n document.removeEventListener('keydown', this, true);\r\n document.removeEventListener('contextmenu', this, true);\r\n // Indicate the drag has been aborted. This allows the mouse\r\n // event handlers to return early when the drag is canceled.\r\n data.dragAborted = true;\r\n // If the drag is not active, there's nothing more to do.\r\n if (!data.dragActive) {\r\n return;\r\n }\r\n // Reset the tabs to their non-dragged positions.\r\n Private.resetTabPositions(this.contentNode.children, this._orientation);\r\n // Clear the cursor override.\r\n data.override.dispose();\r\n // Clear the dragging style classes.\r\n data.tab.classList.remove('p-mod-dragging');\r\n this.removeClass('p-mod-dragging');\r\n };\r\n /**\r\n * Adjust the current index for a tab insert operation.\r\n *\r\n * This method accounts for the tab bar's insertion behavior when\r\n * adjusting the current index and emitting the changed signal.\r\n */\r\n TabBar.prototype._adjustCurrentForInsert = function (i, title) {\r\n // Lookup commonly used variables.\r\n var ct = this.currentTitle;\r\n var ci = this._currentIndex;\r\n var bh = this.insertBehavior;\r\n // Handle the behavior where the new tab is always selected,\r\n // or the behavior where the new tab is selected if needed.\r\n if (bh === 'select-tab' || (bh === 'select-tab-if-needed' && ci === -1)) {\r\n this._currentIndex = i;\r\n this._previousTitle = ct;\r\n this._currentChanged.emit({\r\n previousIndex: ci, previousTitle: ct,\r\n currentIndex: i, currentTitle: title\r\n });\r\n return;\r\n }\r\n // Otherwise, silently adjust the current index if needed.\r\n if (ci >= i) {\r\n this._currentIndex++;\r\n }\r\n };\r\n /**\r\n * Adjust the current index for a tab move operation.\r\n *\r\n * This method will not cause the actual current tab to change.\r\n * It silently adjusts the index to account for the given move.\r\n */\r\n TabBar.prototype._adjustCurrentForMove = function (i, j) {\r\n if (this._currentIndex === i) {\r\n this._currentIndex = j;\r\n }\r\n else if (this._currentIndex < i && this._currentIndex >= j) {\r\n this._currentIndex++;\r\n }\r\n else if (this._currentIndex > i && this._currentIndex <= j) {\r\n this._currentIndex--;\r\n }\r\n };\r\n /**\r\n * Adjust the current index for a tab remove operation.\r\n *\r\n * This method accounts for the tab bar's remove behavior when\r\n * adjusting the current index and emitting the changed signal.\r\n */\r\n TabBar.prototype._adjustCurrentForRemove = function (i, title) {\r\n // Lookup commonly used variables.\r\n var ci = this._currentIndex;\r\n var bh = this.removeBehavior;\r\n // Silently adjust the index if the current tab is not removed.\r\n if (ci !== i) {\r\n if (ci > i) {\r\n this._currentIndex--;\r\n }\r\n return;\r\n }\r\n // No tab gets selected if the tab bar is empty.\r\n if (this._titles.length === 0) {\r\n this._currentIndex = -1;\r\n this._currentChanged.emit({\r\n previousIndex: i, previousTitle: title,\r\n currentIndex: -1, currentTitle: null\r\n });\r\n return;\r\n }\r\n // Handle behavior where the next sibling tab is selected.\r\n if (bh === 'select-tab-after') {\r\n this._currentIndex = Math.min(i, this._titles.length - 1);\r\n this._currentChanged.emit({\r\n previousIndex: i, previousTitle: title,\r\n currentIndex: this._currentIndex, currentTitle: this.currentTitle\r\n });\r\n return;\r\n }\r\n // Handle behavior where the previous sibling tab is selected.\r\n if (bh === 'select-tab-before') {\r\n this._currentIndex = Math.max(0, i - 1);\r\n this._currentChanged.emit({\r\n previousIndex: i, previousTitle: title,\r\n currentIndex: this._currentIndex, currentTitle: this.currentTitle\r\n });\r\n return;\r\n }\r\n // Handle behavior where the previous history tab is selected.\r\n if (bh === 'select-previous-tab') {\r\n if (this._previousTitle) {\r\n this._currentIndex = this._titles.indexOf(this._previousTitle);\r\n this._previousTitle = null;\r\n }\r\n else {\r\n this._currentIndex = Math.min(i, this._titles.length - 1);\r\n }\r\n this._currentChanged.emit({\r\n previousIndex: i, previousTitle: title,\r\n currentIndex: this._currentIndex, currentTitle: this.currentTitle\r\n });\r\n return;\r\n }\r\n // Otherwise, no tab gets selected.\r\n this._currentIndex = -1;\r\n this._currentChanged.emit({\r\n previousIndex: i, previousTitle: title,\r\n currentIndex: -1, currentTitle: null\r\n });\r\n };\r\n /**\r\n * Handle the `changed` signal of a title object.\r\n */\r\n TabBar.prototype._onTitleChanged = function (sender) {\r\n this.update();\r\n };\r\n return TabBar;\r\n}(widget_1.Widget));\r\nexports.TabBar = TabBar;\r\n/**\r\n * The namespace for the `TabBar` class statics.\r\n */\r\n(function (TabBar) {\r\n /**\r\n * The default implementation of `IRenderer`.\r\n *\r\n * #### Notes\r\n * Subclasses are free to reimplement rendering methods as needed.\r\n */\r\n var Renderer = /** @class */ (function () {\r\n /**\r\n * Construct a new renderer.\r\n */\r\n function Renderer() {\r\n /**\r\n * A selector which matches the close icon node in a tab.\r\n */\r\n this.closeIconSelector = '.p-TabBar-tabCloseIcon';\r\n this._tabID = 0;\r\n this._tabKeys = new WeakMap();\r\n }\r\n /**\r\n * Render the virtual element for a tab.\r\n *\r\n * @param data - The data to use for rendering the tab.\r\n *\r\n * @returns A virtual element representing the tab.\r\n */\r\n Renderer.prototype.renderTab = function (data) {\r\n var title = data.title.caption;\r\n var key = this.createTabKey(data);\r\n var style = this.createTabStyle(data);\r\n var className = this.createTabClass(data);\r\n var dataset = this.createTabDataset(data);\r\n return (virtualdom_1.h.li({ key: key, className: className, title: title, style: style, dataset: dataset }, this.renderIcon(data), this.renderLabel(data), this.renderCloseIcon(data)));\r\n };\r\n /**\r\n * Render the icon element for a tab.\r\n *\r\n * @param data - The data to use for rendering the tab.\r\n *\r\n * @returns A virtual element representing the tab icon.\r\n */\r\n Renderer.prototype.renderIcon = function (data) {\r\n var className = this.createIconClass(data);\r\n return virtualdom_1.h.div({ className: className }, data.title.iconLabel);\r\n };\r\n /**\r\n * Render the label element for a tab.\r\n *\r\n * @param data - The data to use for rendering the tab.\r\n *\r\n * @returns A virtual element representing the tab label.\r\n */\r\n Renderer.prototype.renderLabel = function (data) {\r\n return virtualdom_1.h.div({ className: 'p-TabBar-tabLabel' }, data.title.label);\r\n };\r\n /**\r\n * Render the close icon element for a tab.\r\n *\r\n * @param data - The data to use for rendering the tab.\r\n *\r\n * @returns A virtual element representing the tab close icon.\r\n */\r\n Renderer.prototype.renderCloseIcon = function (data) {\r\n return virtualdom_1.h.div({ className: 'p-TabBar-tabCloseIcon' });\r\n };\r\n /**\r\n * Create a unique render key for the tab.\r\n *\r\n * @param data - The data to use for the tab.\r\n *\r\n * @returns The unique render key for the tab.\r\n *\r\n * #### Notes\r\n * This method caches the key against the tab title the first time\r\n * the key is generated. This enables efficient rendering of moved\r\n * tabs and avoids subtle hover style artifacts.\r\n */\r\n Renderer.prototype.createTabKey = function (data) {\r\n var key = this._tabKeys.get(data.title);\r\n if (key === undefined) {\r\n key = \"tab-key-\" + this._tabID++;\r\n this._tabKeys.set(data.title, key);\r\n }\r\n return key;\r\n };\r\n /**\r\n * Create the inline style object for a tab.\r\n *\r\n * @param data - The data to use for the tab.\r\n *\r\n * @returns The inline style data for the tab.\r\n */\r\n Renderer.prototype.createTabStyle = function (data) {\r\n return { zIndex: \"\" + data.zIndex };\r\n };\r\n /**\r\n * Create the class name for the tab.\r\n *\r\n * @param data - The data to use for the tab.\r\n *\r\n * @returns The full class name for the tab.\r\n */\r\n Renderer.prototype.createTabClass = function (data) {\r\n var name = 'p-TabBar-tab';\r\n if (data.title.className) {\r\n name += \" \" + data.title.className;\r\n }\r\n if (data.title.closable) {\r\n name += ' p-mod-closable';\r\n }\r\n if (data.current) {\r\n name += ' p-mod-current';\r\n }\r\n return name;\r\n };\r\n /**\r\n * Create the dataset for a tab.\r\n *\r\n * @param data - The data to use for the tab.\r\n *\r\n * @returns The dataset for the tab.\r\n */\r\n Renderer.prototype.createTabDataset = function (data) {\r\n return data.title.dataset;\r\n };\r\n /**\r\n * Create the class name for the tab icon.\r\n *\r\n * @param data - The data to use for the tab.\r\n *\r\n * @returns The full class name for the tab icon.\r\n */\r\n Renderer.prototype.createIconClass = function (data) {\r\n var name = 'p-TabBar-tabIcon';\r\n var extra = data.title.iconClass;\r\n return extra ? name + \" \" + extra : name;\r\n };\r\n return Renderer;\r\n }());\r\n TabBar.Renderer = Renderer;\r\n /**\r\n * The default `Renderer` instance.\r\n */\r\n TabBar.defaultRenderer = new Renderer();\r\n})(TabBar = exports.TabBar || (exports.TabBar = {}));\r\nexports.TabBar = TabBar;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * The start drag distance threshold.\r\n */\r\n Private.DRAG_THRESHOLD = 5;\r\n /**\r\n * The detach distance threshold.\r\n */\r\n Private.DETACH_THRESHOLD = 20;\r\n /**\r\n * Create the DOM node for a tab bar.\r\n */\r\n function createNode() {\r\n var node = document.createElement('div');\r\n var content = document.createElement('ul');\r\n content.className = 'p-TabBar-content';\r\n node.appendChild(content);\r\n return node;\r\n }\r\n Private.createNode = createNode;\r\n /**\r\n * Coerce a title or options into a real title.\r\n */\r\n function asTitle(value) {\r\n return value instanceof title_1.Title ? value : new title_1.Title(value);\r\n }\r\n Private.asTitle = asTitle;\r\n /**\r\n * Parse the transition duration for a tab node.\r\n */\r\n function parseTransitionDuration(tab) {\r\n var style = window.getComputedStyle(tab);\r\n return 1000 * (parseFloat(style.transitionDuration) || 0);\r\n }\r\n Private.parseTransitionDuration = parseTransitionDuration;\r\n /**\r\n * Get a snapshot of the current tab layout values.\r\n */\r\n function snapTabLayout(tabs, orientation) {\r\n var layout = new Array(tabs.length);\r\n for (var i = 0, n = tabs.length; i < n; ++i) {\r\n var node = tabs[i];\r\n var style = window.getComputedStyle(node);\r\n if (orientation === 'horizontal') {\r\n layout[i] = {\r\n pos: node.offsetLeft,\r\n size: node.offsetWidth,\r\n margin: parseFloat(style.marginLeft) || 0\r\n };\r\n }\r\n else {\r\n layout[i] = {\r\n pos: node.offsetTop,\r\n size: node.offsetHeight,\r\n margin: parseFloat(style.marginTop) || 0\r\n };\r\n }\r\n }\r\n return layout;\r\n }\r\n Private.snapTabLayout = snapTabLayout;\r\n /**\r\n * Test if the event exceeds the drag threshold.\r\n */\r\n function dragExceeded(data, event) {\r\n var dx = Math.abs(event.clientX - data.pressX);\r\n var dy = Math.abs(event.clientY - data.pressY);\r\n return dx >= Private.DRAG_THRESHOLD || dy >= Private.DRAG_THRESHOLD;\r\n }\r\n Private.dragExceeded = dragExceeded;\r\n /**\r\n * Test if the event exceeds the drag detach threshold.\r\n */\r\n function detachExceeded(data, event) {\r\n var rect = data.contentRect;\r\n return ((event.clientX < rect.left - Private.DETACH_THRESHOLD) ||\r\n (event.clientX >= rect.right + Private.DETACH_THRESHOLD) ||\r\n (event.clientY < rect.top - Private.DETACH_THRESHOLD) ||\r\n (event.clientY >= rect.bottom + Private.DETACH_THRESHOLD));\r\n }\r\n Private.detachExceeded = detachExceeded;\r\n /**\r\n * Update the relative tab positions and computed target index.\r\n */\r\n function layoutTabs(tabs, data, event, orientation) {\r\n // Compute the orientation-sensitive values.\r\n var pressPos;\r\n var localPos;\r\n var clientPos;\r\n var clientSize;\r\n if (orientation === 'horizontal') {\r\n pressPos = data.pressX;\r\n localPos = event.clientX - data.contentRect.left;\r\n clientPos = event.clientX;\r\n clientSize = data.contentRect.width;\r\n }\r\n else {\r\n pressPos = data.pressY;\r\n localPos = event.clientY - data.contentRect.top;\r\n clientPos = event.clientY;\r\n clientSize = data.contentRect.height;\r\n }\r\n // Compute the target data.\r\n var targetIndex = data.index;\r\n var targetPos = localPos - data.tabPressPos;\r\n var targetEnd = targetPos + data.tabSize;\r\n // Update the relative tab positions.\r\n for (var i = 0, n = tabs.length; i < n; ++i) {\r\n var pxPos = void 0;\r\n var layout = data.tabLayout[i];\r\n var threshold = layout.pos + (layout.size >> 1);\r\n if (i < data.index && targetPos < threshold) {\r\n pxPos = data.tabSize + data.tabLayout[i + 1].margin + \"px\";\r\n targetIndex = Math.min(targetIndex, i);\r\n }\r\n else if (i > data.index && targetEnd > threshold) {\r\n pxPos = -data.tabSize - layout.margin + \"px\";\r\n targetIndex = Math.max(targetIndex, i);\r\n }\r\n else if (i === data.index) {\r\n var ideal = clientPos - pressPos;\r\n var limit = clientSize - (data.tabPos + data.tabSize);\r\n pxPos = Math.max(-data.tabPos, Math.min(ideal, limit)) + \"px\";\r\n }\r\n else {\r\n pxPos = '';\r\n }\r\n if (orientation === 'horizontal') {\r\n tabs[i].style.left = pxPos;\r\n }\r\n else {\r\n tabs[i].style.top = pxPos;\r\n }\r\n }\r\n // Update the computed target index.\r\n data.targetIndex = targetIndex;\r\n }\r\n Private.layoutTabs = layoutTabs;\r\n /**\r\n * Position the drag tab at its final resting relative position.\r\n */\r\n function finalizeTabPosition(data, orientation) {\r\n // Compute the orientation-sensitive client size.\r\n var clientSize;\r\n if (orientation === 'horizontal') {\r\n clientSize = data.contentRect.width;\r\n }\r\n else {\r\n clientSize = data.contentRect.height;\r\n }\r\n // Compute the ideal final tab position.\r\n var ideal;\r\n if (data.targetIndex === data.index) {\r\n ideal = 0;\r\n }\r\n else if (data.targetIndex > data.index) {\r\n var tgt = data.tabLayout[data.targetIndex];\r\n ideal = tgt.pos + tgt.size - data.tabSize - data.tabPos;\r\n }\r\n else {\r\n var tgt = data.tabLayout[data.targetIndex];\r\n ideal = tgt.pos - data.tabPos;\r\n }\r\n // Compute the tab position limit.\r\n var limit = clientSize - (data.tabPos + data.tabSize);\r\n var final = Math.max(-data.tabPos, Math.min(ideal, limit));\r\n // Set the final orientation-sensitive position.\r\n if (orientation === 'horizontal') {\r\n data.tab.style.left = final + \"px\";\r\n }\r\n else {\r\n data.tab.style.top = final + \"px\";\r\n }\r\n }\r\n Private.finalizeTabPosition = finalizeTabPosition;\r\n /**\r\n * Reset the relative positions of the given tabs.\r\n */\r\n function resetTabPositions(tabs, orientation) {\r\n algorithm_1.each(tabs, function (tab) {\r\n if (orientation === 'horizontal') {\r\n tab.style.left = '';\r\n }\r\n else {\r\n tab.style.top = '';\r\n }\r\n });\r\n }\r\n Private.resetTabPositions = resetTabPositions;\r\n})(Private || (Private = {}));\r\n","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-scale\"));\nconst colorbrewer_1 = __importDefault(require(\"./colorbrewer\"));\nconst default_scheme = 'RdYlGn';\n//\n// Returns the maximum number of colors available in the colorbrewer object\nfunction get_max_index(color_object) {\n return d3.max(Object.keys(color_object).map(Number));\n}\nfunction cycle_colors(colors, count) {\n const colors_len = colors.length;\n if (colors_len > count) {\n return colors.slice(0, count);\n }\n else {\n let return_array = [];\n let iters = Math.floor(count / colors_len);\n for (; iters > 0; iters--) {\n return_array = return_array.concat(colors);\n }\n return return_array.concat(colors.slice(0, count % colors_len));\n }\n}\nexports.cycle_colors = cycle_colors;\nfunction cycle_colors_from_scheme(scheme, num_steps) {\n scheme = (scheme in colorbrewer_1.default) ? scheme : default_scheme;\n const color_set = colorbrewer_1.default[scheme];\n // Indices of colorbrewer objects are strings\n let color_index = num_steps.toString();\n if (num_steps === 2) {\n return [color_set[3][\"0\"], color_set[3][\"2\"]];\n }\n else if (color_index in color_set) {\n return color_set[color_index];\n }\n else {\n color_index = get_max_index(color_set).toString();\n return this.cycle_colors(color_set[color_index], num_steps);\n }\n}\nexports.cycle_colors_from_scheme = cycle_colors_from_scheme;\nfunction get_linear_scale(scheme) {\n scheme = ((scheme in colorbrewer_1.default) && !(colorbrewer_1.default[scheme][\"type\"] === \"qual\")) ?\n scheme : default_scheme;\n const color_set = colorbrewer_1.default[scheme];\n const color_index = get_max_index(color_set).toString();\n const colors = color_set[color_index];\n const scale = d3.scaleLinear().range(colors);\n return scale;\n}\nexports.get_linear_scale = get_linear_scale;\nfunction get_ordinal_scale(scheme, num_steps) {\n const scale = d3.scaleOrdinal();\n scale.range(this.cycle_colors_from_scheme(scheme, num_steps));\n return scale;\n}\nexports.get_ordinal_scale = get_ordinal_scale;\nfunction get_linear_scale_range(scheme) {\n return this.get_linear_scale(scheme).range();\n}\nexports.get_linear_scale_range = get_linear_scale_range;\nfunction get_ordinal_scale_range(scheme, num_steps) {\n return this.get_ordinal_scale(scheme, num_steps).range();\n}\nexports.get_ordinal_scale_range = get_ordinal_scale_range;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sb3JVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Db2xvclV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsdUVBQXVFO0FBQ3ZFLGdFQUF3QztBQUV4QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUE7QUFDL0IsRUFBRTtBQUNGLDJFQUEyRTtBQUMzRSxTQUFTLGFBQWEsQ0FBQyxZQUFZO0lBQy9CLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUs7SUFDdEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNqQyxJQUFHLFVBQVUsR0FBRyxLQUFLLEVBQUU7UUFDbkIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNqQztTQUFNO1FBQ0gsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLE9BQUssS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNyQixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUNuRTtBQUNMLENBQUM7QUFaRCxvQ0FZQztBQUVELFNBQWdCLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxTQUFTO0lBQ3RELE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxxQkFBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQzNELE1BQU0sU0FBUyxHQUFHLHFCQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdEMsNkNBQTZDO0lBQzdDLElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUV2QyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7UUFDakIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNqRDtTQUFNLElBQUksV0FBVyxJQUFJLFNBQVMsRUFBRTtRQUNqQyxPQUFPLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUNqQztTQUFNO1FBQ0gsV0FBVyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQy9EO0FBQ0wsQ0FBQztBQWZELDREQWVDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsTUFBTTtJQUNuQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxxQkFBVyxDQUFDLElBQUksQ0FBQyxDQUFDLHFCQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLHFCQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRXhELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFURCw0Q0FTQztBQUVELFNBQWdCLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxTQUFTO0lBQy9DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM5RCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBSkQsOENBSUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FBQyxNQUFNO0lBQ3pDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pELENBQUM7QUFGRCx3REFFQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxTQUFTO0lBQ3JELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3RCxDQUFDO0FBRkQsMERBRUMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* This module contains elementary geometric functions to determine whether\n * shapes are contained within selectors.\n */\nvar lasso_test_1 = require(\"./lasso_test\");\nexports.point_in_lasso = lasso_test_1.point_in_lasso;\nfunction point_in_rectangle(point, x, y) {\n // Checks whether `point` is within the rectangle of coordinates\n // (x0, y0) (x1, y0) (x1, y1) (x0, y1)\n // If one of x or y is undefined, treat them as [-inf, inf]\n if (x.length == 0 && y.length == 0) {\n return false;\n }\n let is_inside = true;\n if (x.length != 0) {\n is_inside = is_inside && x[0] <= point[0] && point[0] <= x[1];\n }\n if (y.length != 0) {\n is_inside = is_inside && y[0] <= point[1] && point[1] <= y[1];\n }\n return is_inside;\n}\nexports.point_in_rectangle = point_in_rectangle;\nfunction rect_inter_rect(x0, y0, x1, y1) {\n // Checks whether two rectangles intersect\n return seg_inter_seg(x0, x1) && seg_inter_seg(y0, y1);\n}\nexports.rect_inter_rect = rect_inter_rect;\nfunction lasso_inter_rect(x, y, vertices) {\n // checks whether the lasso intersects the rectangle of coordinates\n // (x0, y0) (x1, y0) (x1, y1) (x0, y1)\n for (let i = 0; i < vertices.length; i++) {\n if (point_in_rectangle(vertices[i], x, y)) {\n return true;\n }\n }\n return false;\n}\nexports.lasso_inter_rect = lasso_inter_rect;\nfunction seg_inter_seg(p, q) {\n // Checks whether the 1d segments [p0, p1] and [q0, q1] intersect\n // If one of the segments is empty, treat it as [-inf, inf]\n if (p.length == 0 || q.length == 0) {\n return (p.length != 0 || q.length != 0);\n }\n p.sort(function (a, b) { return a - b; });\n q.sort(function (a, b) { return a - b; });\n return ((p[0] < q[0] != p[0] < q[1]) || (p[1] < q[0] != p[1] < q[1]) ||\n (q[0] < p[0] != q[0] < p[1]) || (q[1] < p[0] != q[1] < p[1]));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3JfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VsZWN0b3JfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7O0FBRUg7O0dBRUc7QUFFSCwyQ0FBOEM7QUFBckMsc0NBQUEsY0FBYyxDQUFBO0FBRXZCLFNBQWdCLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUMxQyxnRUFBZ0U7SUFDaEUsc0NBQXNDO0lBQ3RDLDJEQUEyRDtJQUUzRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7S0FBRTtJQUVyRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFckIsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUNmLFNBQVMsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUNmLFNBQVMsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQWhCRCxnREFnQkM7QUFFRCxTQUFnQixlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUMxQywwQ0FBMEM7SUFDMUMsT0FBTyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUhELDBDQUdDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRO0lBQzNDLG1FQUFtRTtJQUNuRSxzQ0FBc0M7SUFFdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7U0FBRTtLQUM5RDtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFSRCw0Q0FRQztBQUVELFNBQVMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3ZCLGlFQUFpRTtJQUNqRSwyREFBMkQ7SUFDM0QsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztLQUMzQztJQUNELENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBUyxDQUFDLEVBQUUsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxHQUFDLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBUyxDQUFDLEVBQUUsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxHQUFDLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3Scale = __importStar(require(\"d3-scale\"));\nconst Scale_1 = require(\"./Scale\");\nclass LinearScale extends Scale_1.Scale {\n render() {\n this.scale = d3Scale.scaleLinear();\n if (this.model.domain.length > 0)\n this.scale.domain(this.model.domain);\n this.offset = 0;\n this.create_event_listeners();\n }\n expand_domain(old_range, new_range) {\n // If you have a current range and then a new range and want to\n // expand the domain to expand to the new range but keep it\n // consistent with the previous one, this is the function you use.\n // The following code is required to make a copy of the actual\n // state of the scale. Referring to the model domain and then\n // setting the range to be the old range in case it is not.\n const unpadded_scale = this.scale.copy();\n // To handle the case for a clamped scale for which we have to\n // expand the domain, the copy should be unclamped.\n unpadded_scale.clamp(false);\n unpadded_scale.domain(this.model.domain);\n unpadded_scale.range(old_range);\n this.scale.domain(new_range.map(function (limit) {\n return unpadded_scale.invert(limit);\n }));\n }\n invert(pixel) {\n return this.scale.invert(pixel);\n }\n invert_range(pixels) {\n //Pixels is a non-decreasing array of pixel values\n const that = this;\n return pixels.map(function (pix) { return that.invert(pix); });\n }\n}\nexports.LinearScale = LinearScale;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZWFyU2NhbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTGluZWFyU2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILGtEQUFvQztBQUNwQyxtQ0FBZ0M7QUFFaEMsTUFBYSxXQUFZLFNBQVEsYUFBSztJQUVsQyxNQUFNO1FBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBUyxFQUFFLFNBQVM7UUFDOUIsK0RBQStEO1FBQy9ELDJEQUEyRDtRQUMzRCxrRUFBa0U7UUFFbEUsOERBQThEO1FBQzlELDZEQUE2RDtRQUM3RCwyREFBMkQ7UUFDM0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6Qyw4REFBOEQ7UUFDOUQsbURBQW1EO1FBQ25ELGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFTLEtBQUs7WUFDMUMsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBTTtRQUNmLGtEQUFrRDtRQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVMsR0FBRyxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDSjtBQXZDRCxrQ0F1Q0MifQ==","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.interpolator(domain); break;\n default: this.interpolator(interpolator).domain(domain); break;\n }\n return this;\n}\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal() {\n var index = map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n var a = domain[0], b = domain[domain.length - 1], t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous(transform, untransform) {\n return transformer()(transform, untransform);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(identity, identity);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? map.call(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice\";\nimport {copy, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport function loggish(transform) {\n var scale = transform(transformLog, transformExp),\n domain = scale.domain,\n base = 10,\n logs,\n pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, log()).base(scale.base());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear\";\nimport {copy, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear\";\nimport {copy, identity, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\nimport {initRange} from \"./init\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(identity, identity),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\nimport {initRange} from \"./init\";\n\nexport default function() {\n return initRange.apply(calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\nimport {linearish} from \"./linear\";\nimport {loggish} from \"./log\";\nimport {symlogish} from \"./symlog\";\nimport {powish} from \"./pow\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect} from \"d3-array\";\nimport {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\n\nexport default function sequentialQuantile() {\n var domain = [],\n interpolator = identity;\n\n function scale(x) {\n if (!isNaN(x = +x)) return interpolator((bisect(domain, x) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n","import {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\nimport {linearish} from \"./linear\";\nimport {loggish} from \"./log\";\nimport {copy} from \"./sequential\";\nimport {symlogish} from \"./symlog\";\nimport {powish} from \"./pow\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","export {\n default as scaleBand,\n point as scalePoint\n} from \"./band\";\n\nexport {\n default as scaleIdentity\n} from \"./identity\";\n\nexport {\n default as scaleLinear\n} from \"./linear\";\n\nexport {\n default as scaleLog\n} from \"./log\";\n\nexport {\n default as scaleSymlog\n} from \"./symlog\";\n\nexport {\n default as scaleOrdinal,\n implicit as scaleImplicit\n} from \"./ordinal\";\n\nexport {\n default as scalePow,\n sqrt as scaleSqrt\n} from \"./pow\";\n\nexport {\n default as scaleQuantile\n} from \"./quantile\";\n\nexport {\n default as scaleQuantize\n} from \"./quantize\";\n\nexport {\n default as scaleThreshold\n} from \"./threshold\";\n\nexport {\n default as scaleTime\n} from \"./time\";\n\nexport {\n default as scaleUtc\n} from \"./utcTime\";\n\nexport {\n default as scaleSequential,\n sequentialLog as scaleSequentialLog,\n sequentialPow as scaleSequentialPow,\n sequentialSqrt as scaleSequentialSqrt,\n sequentialSymlog as scaleSequentialSymlog\n} from \"./sequential\";\n\nexport {\n default as scaleSequentialQuantile\n} from \"./sequentialQuantile\";\n\nexport {\n default as scaleDiverging,\n divergingLog as scaleDivergingLog,\n divergingPow as scaleDivergingPow,\n divergingSqrt as scaleDivergingSqrt,\n divergingSymlog as scaleDivergingSymlog\n} from \"./diverging\";\n\nexport {\n default as tickFormat\n} from \"./tickFormat\";\n","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst base_1 = require(\"@jupyter-widgets/base\");\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\n// const d3 =Object.assign({}, require(\"d3-axis\"), require(\"d3-format\"), require(\"d3-selection\"), require(\"d3-selection-multi\"), require(\"d3-time\"), require(\"d3-time-format\"));\nconst utils = __importStar(require(\"./utils\"));\nconst _ = __importStar(require(\"underscore\"));\n// Polyfill for Math.log10 in IE11\nMath.log10 = Math.log10 || function (x) {\n return Math.log(x) / Math.LN10;\n};\nconst DATESCALE_WIDTH_THRESHOLD = 500;\nconst UNITS_ARRAY = [\"em\", \"ex\", \"px\"];\nclass Axis extends base_1.WidgetView {\n initialize() {\n this.setElement(document.createElementNS(d3.namespaces.svg, \"g\"));\n this.d3el = d3.select(this.el);\n super.initialize.apply(this, arguments);\n }\n render() {\n this.d3el.style(\"display\", this.model.get(\"visible\") ? \"inline\" : \"none\");\n this.parent = this.options.parent;\n const scale_promise = this.set_scale_promise(this.model.get(\"scale\"));\n const offset_promise = this.get_offset_promise();\n Promise.all([scale_promise, offset_promise]).then(() => {\n this.create_listeners();\n this.tick_format = this.generate_tick_formatter();\n this.set_scales_range();\n this.append_axis();\n });\n }\n create_listeners() {\n // Creates all event listeners\n this.listenTo(this.model, \"change:scale\", (model, value) => {\n this.update_scale(model.previous(\"scale\"), value);\n // TODO: rescale_axis does too many things. Decompose\n this.axis.scale(this.axis_scale.scale); // TODO: this is in redraw_axisline\n this.rescale_axis();\n });\n // Tick attributes\n this.listenTo(this.model, \"change:tick_values\", this.set_tick_values);\n this.listenTo(this.model, \"change:tick_format\", this.tickformat_changed);\n this.listenTo(this.model, \"change:num_ticks\", this.set_tick_values);\n this.listenTo(this.model, \"change:tick_rotate\", this.apply_tick_styling);\n this.listenTo(this.model, \"change:tick_style\", this.apply_tick_styling);\n // Label attributes\n this.model.on_some_change([\"label\", \"label_color\"], this.update_label, this);\n // Axis attributes\n this.listenTo(this.model, \"change:color\", this.update_color);\n this.model.on_some_change([\"grid_color\", \"grid_lines\"], this.update_grid_lines, this);\n this.listenTo(this.model, \"change:label_location\", this.update_label_location);\n this.listenTo(this.model, \"change:label_offset\", this.update_label_offset);\n this.listenTo(this.model, \"change:visible\", this.update_visibility);\n this.model.on_some_change([\"side\", \"orientation\"], this.update_display, this);\n this.listenTo(this.model, \"change:offset\", this.update_offset);\n this.parent.on(\"margin_updated\", this.parent_margin_updated, this);\n }\n update_offset() {\n const offset_creation_promise = this.get_offset_promise();\n offset_creation_promise.then(() => {\n this.set_scales_range();\n this.update_offset_scale_domain();\n this.g_axisline.attr(\"transform\", this.get_axis_transform());\n this.update_grid_lines();\n });\n }\n update_display() {\n this.g_axisline.remove();\n this.set_scales_range();\n this.append_axis();\n }\n set_tick_values(animate) {\n // Sets specific tick values from \"tick_values\" parameter\n let useticks = [];\n const tick_values = this.model.get(\"tick_values\");\n const num_ticks = this.model.get(\"num_ticks\");\n if (tick_values !== undefined && tick_values !== null && tick_values.length > 0) {\n this.axis.tickValues(this.get_ticks_from_array_or_length(tick_values));\n }\n else if (num_ticks !== undefined && num_ticks !== null) {\n this.axis.tickValues(this.get_ticks_from_array_or_length());\n }\n else {\n if (this.axis_scale.model.type === \"ordinal\") {\n this.axis.tickValues(this.axis_scale.scale.domain());\n }\n else if (this.axis_scale.model.type === \"date\") {\n // Reduce number of suggested ticks if figure width is below the\n // threshold. Note: \"undefined\" will result in the D3 default\n // setting\n const numDateTicks = (this.width < DATESCALE_WIDTH_THRESHOLD) ?\n 5 :\n undefined;\n this.axis.tickValues(this.axis_scale.scale.ticks(numDateTicks));\n }\n else if (this.axis_scale.model.type === \"log\") {\n let i, r;\n const allticks = this.axis_scale.scale.ticks();\n const oom = Math.abs(Math.log10(this.axis_scale.scale.domain()[1] / this.axis_scale.scale.domain()[0]));\n if (oom < 2) {\n this.axis.tickValues(allticks);\n }\n else if (oom < 7) {\n useticks = [];\n for (i = 0; i < allticks.length; i++) {\n r = Math.abs(Math.log10(allticks[i]) % 1);\n if ((Math.abs(r) < 0.001) ||\n (Math.abs(r - 1) < 0.001) ||\n (Math.abs(r - 0.30103) < 0.001) ||\n (Math.abs(r - 0.69897) < 0.001)) {\n useticks.push(allticks[i]);\n }\n }\n this.axis.tickValues(useticks);\n }\n else {\n useticks = [];\n const s = Math.round(oom / 10);\n for (i = 0; i < allticks.length; i++) {\n r = Math.abs(Math.log10(allticks[i]) % s);\n if ((Math.abs(r) < 0.001) || (Math.abs(r - s) < 0.001)) {\n useticks.push(allticks[i]);\n }\n }\n this.axis.tickValues(useticks);\n }\n }\n else {\n this.axis.tickValues(this.axis_scale.scale.ticks());\n }\n }\n if (this.model.get(\"tick_format\") === null ||\n this.model.get(\"tick_format\") === undefined) {\n if (this.axis_scale.type !== \"ordinal\") {\n this.tick_format = this.guess_tick_format(this.axis.tickValues());\n }\n }\n this.axis.tickFormat(this.tick_format);\n if (this.g_axisline) {\n this.g_axisline\n .transition(\"set_tick_values\")\n .duration(animate === true ? this.parent.model.get(\"animation_duration\") : 0)\n .call(this.axis);\n this.apply_tick_styling();\n }\n }\n tickformat_changed() {\n this.tick_format = this.generate_tick_formatter();\n this.axis.tickFormat(this.tick_format);\n if (this.g_axisline) {\n this.g_axisline.call(this.axis);\n }\n this.apply_tick_styling();\n }\n apply_tick_styling() {\n // Applies current tick styling to all displayed ticks\n this.g_axisline.selectAll(\".tick text\")\n .styles(this.model.get(\"tick_style\"))\n .attr(\"transform\", this.get_tick_transforms());\n }\n get_tick_transforms() {\n // parses object and returns a string that can be passed to a D3 as a\n // set of options\n // Note: Currently, only the `tick_rotate` attribute uses .transform()\n const rotation = this.model.get(\"tick_rotate\");\n return `rotate(${rotation})`;\n }\n update_scales() {\n // Updates the domains of both scales\n this.update_scale_domain();\n this.update_offset_scale_domain();\n }\n update_scale_domain() {\n // Sets the scale domain (Range of input values)\n const is_vertical = this.model.get(\"orientation\") === \"vertical\";\n const initial_range = (is_vertical) ?\n this.parent.padded_range(\"y\", this.axis_scale.model) :\n this.parent.padded_range(\"x\", this.axis_scale.model);\n const target_range = (is_vertical) ?\n this.parent.range(\"y\") : this.parent.range(\"x\");\n this.axis_scale.expand_domain(initial_range, target_range);\n this.axis.scale(this.axis_scale.scale);\n }\n update_offset_scale_domain() {\n // Sets the domain (range of input values) of the offset scale\n const is_vertical = this.model.get(\"orientation\") === \"vertical\";\n if (this.offset_scale) {\n const initial_range = (!is_vertical) ?\n this.parent.padded_range(\"y\", this.offset_scale.model) :\n this.parent.padded_range(\"x\", this.offset_scale.model);\n const target_range = (!is_vertical) ?\n this.parent.range(\"y\") :\n this.parent.range(\"x\");\n this.offset_scale.expand_domain(initial_range, target_range);\n }\n }\n generate_tick_formatter() {\n if (this.axis_scale.model.type === \"date\" ||\n this.axis_scale.model.type === \"date_color_linear\") {\n if (this.model.get(\"tick_format\")) {\n return d3.timeFormat(this.model.get(\"tick_format\"));\n }\n else {\n return this.guess_tick_format();\n }\n }\n else if (this.axis_scale.model.type === \"ordinal\") {\n const tick_format = this.model.get(\"tick_format\");\n if (tick_format) {\n //TODO: This may not be the best way to do this. We can\n //check the instance of the elements in the domain and\n //apply the format depending on that.\n if (utils.is_valid_time_format(tick_format)) {\n return d3.timeFormat(tick_format);\n }\n else {\n return d3.format(tick_format);\n }\n }\n return (d) => { return d; };\n }\n else {\n // linear or log scale\n if (this.model.get(\"tick_format\")) {\n return d3.format(this.model.get(\"tick_format\"));\n }\n return this.guess_tick_format();\n }\n }\n set_scales_range() {\n const is_vertical = this.model.get(\"orientation\") === \"vertical\";\n this.axis_scale.set_range((is_vertical) ?\n [this.height, 0] : [0, this.width]);\n if (this.offset_scale) {\n this.offset_scale.set_range((is_vertical) ?\n [0, this.width] : [this.height, 0]);\n }\n }\n create_axis() {\n // Creates the initial D3 axis and sets it on this.axis\n const is_vertical = this.model.get(\"orientation\") === \"vertical\";\n const side = this.model.get(\"side\");\n if (is_vertical) {\n this.axis = side === \"right\" ? d3.axisRight(this.axis_scale.scale)\n : d3.axisLeft(this.axis_scale.scale);\n }\n else {\n this.axis = side === \"top\" ? d3.axisTop(this.axis_scale.scale)\n : d3.axisBottom(this.axis_scale.scale);\n }\n }\n append_axis() {\n this.create_axis();\n this.update_scales();\n // Create initial SVG element\n this.g_axisline = this.d3el.append(\"g\")\n .attr(\"class\", \"axis\")\n .attr(\"transform\", this.get_axis_transform())\n .call(this.axis);\n // Create element for axis label\n this.g_axisline.append(\"text\")\n .attr(\"class\", \"axislabel\")\n .attrs(this.get_label_attributes())\n .styles(this.get_text_styling())\n .text(this.model.get(\"label\"));\n // Apply custom settings\n this.set_tick_values();\n this.update_grid_lines();\n this.update_color();\n this.apply_tick_styling();\n this.update_label();\n }\n get_offset_promise() {\n /*\n * The offset may require the creation of a Scale, which is async\n * Hence, get_offset_promise returns a promise.\n */\n let return_promise = Promise.resolve();\n const offset = this.model.get(\"offset\");\n const is_vertical = this.model.get(\"orientation\") === \"vertical\";\n if (offset.value !== undefined && offset.value !== null) {\n //If scale is undefined but, the value is defined, then we have\n //to\n if (offset.scale === undefined) {\n this.offset_scale = (is_vertical) ?\n this.parent.scale_x : this.parent.scale_y;\n }\n else {\n return_promise = this.create_child_view(offset.scale)\n .then((view) => {\n this.offset_scale = view;\n if (this.offset_scale.model.type !== \"ordinal\") {\n this.offset_scale.scale.clamp(true);\n }\n this.offset_scale.on(\"domain_changed\", () => {\n this.update_offset_scale_domain();\n this.g_axisline.attr(\"transform\", this.get_axis_transform());\n this.update_grid_lines();\n });\n });\n }\n this.offset_value = offset.value;\n }\n else {\n //required if the offset has been changed from a valid value\n //to null\n this.offset_scale = this.offset_value = undefined;\n }\n return return_promise;\n }\n highlight() {\n this.g_axisline.classed(\"axisbold\", true);\n }\n unhighlight() {\n this.g_axisline.classed(\"axisbold\", false);\n }\n get_basic_transform() {\n const is_vertical = this.model.get(\"orientation\") === \"vertical\";\n const side = this.model.get(\"side\");\n if (is_vertical) {\n return (side === \"right\") ? this.width : 0;\n }\n else {\n return (side === \"top\") ? 0 : this.height;\n }\n }\n get_axis_transform() {\n const is_vertical = this.model.get(\"orientation\") === \"vertical\";\n if (is_vertical) {\n return \"translate(\" + this.process_offset() + \", 0)\";\n }\n else {\n return \"translate(0, \" + this.process_offset() + \")\";\n }\n }\n process_offset() {\n if (this.offset_scale === undefined || this.offset_scale === null) {\n return this.get_basic_transform();\n }\n else {\n let value = this.offset_scale.scale(this.offset_value);\n //The null check is required for two reasons. Value may be null\n //or the scale is ordinal which does not include the value in\n //its domain.\n value = (value === undefined) ? this.get_basic_transform()\n : value;\n return this.offset_scale.offset + value;\n }\n }\n get_label_attributes() {\n // Returns an object based on values of \"label_location\" and \"label_offset\"\n let label_x = 0;\n const label_location = this.model.get(\"label_location\");\n const label_offset = this.calculate_label_offset();\n const is_vertical = this.model.get(\"orientation\") === \"vertical\";\n const side = this.model.get(\"side\");\n if (is_vertical) {\n if (label_location === \"start\") {\n label_x = -(this.height);\n }\n else if (label_location === \"middle\") {\n label_x = -(this.height) / 2;\n }\n if (side === \"right\") {\n return {\n transform: \"rotate(-90)\",\n x: label_x,\n y: label_offset,\n dy: \"1ex\",\n dx: \"0em\"\n };\n }\n else {\n return {\n transform: \"rotate(-90)\",\n x: label_x,\n y: label_offset,\n dy: \"0em\", dx: \"0em\"\n };\n }\n }\n else {\n if (label_location === \"middle\") {\n label_x = this.width / 2;\n }\n else if (label_location === \"end\") {\n label_x = this.width;\n }\n if (side === \"top\") {\n return {\n x: label_x,\n y: label_offset,\n dy: \"0.75ex\",\n dx: \"0em\", transform: \"\"\n };\n }\n else {\n return {\n x: label_x,\n y: label_offset,\n dy: \"0.25ex\",\n dx: \"0em\", transform: \"\"\n };\n }\n }\n }\n get_text_styling() {\n // This function returns the text styling based on the attributes\n // of the axis. As of now, only the text-anchor attribute is set.\n // More can be added :)\n const label_location = this.model.get(\"label_location\");\n if (label_location === \"start\")\n return { \"text-anchor\": \"start\" };\n else if (label_location === \"end\")\n return { \"text-anchor\": \"end\" };\n else\n return { \"text-anchor\": \"middle\" };\n }\n update_label() {\n this.g_axisline.select(\"text.axislabel\")\n .text(this.model.get(\"label\"));\n this.d3el.selectAll(\".axislabel\").selectAll(\"text\");\n if (this.model.get(\"label_color\") !== \"\" &&\n this.model.get(\"label_color\") !== null) {\n this.g_axisline.select(\"text.axislabel\")\n .style(\"fill\", this.model.get(\"label_color\"));\n this.d3el.selectAll(\".axislabel\").selectAll(\"text\")\n .style(\"fill\", this.model.get(\"label_color\"));\n }\n }\n update_label_location() {\n this.g_axisline.select(\"text.axislabel\")\n .attrs(this.get_label_attributes())\n .styles(this.get_text_styling());\n }\n update_label_offset(model, offset) {\n this.label_offset = this.calculate_label_offset();\n this.g_axisline.select(\"text.axislabel\")\n .attr(\"y\", this.label_offset);\n }\n calculate_label_offset() {\n // If the label offset is not defined, depending on the orientation\n // of the axis, an offset is set.\n let label_offset = this.model.get(\"label_offset\");\n const is_vertical = this.model.get(\"orientation\") === \"vertical\";\n const side = this.model.get(\"side\");\n if (!label_offset) {\n if (!is_vertical) {\n label_offset = \"2em\";\n }\n else {\n label_offset = \"4ex\";\n }\n }\n // Label_offset is a signed distance from the axis line. Positive\n // is away from the figure and negative is towards the figure. The\n // notion of away and towards is different for left/right and\n // top/bottom axis.\n let index = -1;\n for (let i = 0; (i < UNITS_ARRAY.length && index === -1); i++) {\n index = label_offset.indexOf(UNITS_ARRAY[i]);\n }\n if (index === -1) {\n return label_offset;\n }\n if (side === \"top\" || side === \"left\") {\n const num = -1 * parseInt(label_offset.substring(0, index));\n label_offset = num + label_offset.substring(index);\n }\n return label_offset;\n }\n update_grid_lines(animate) {\n const grid_type = this.model.get(\"grid_lines\");\n const side = this.model.get(\"side\");\n const orientation = this.model.get(\"orientation\");\n const is_x = orientation !== \"vertical\";\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n let tickSize = orientation === \"vertical\" ? -this.width : -this.height;\n let tickOffset = 0;\n //apply offsets if applicable\n if (this.offset_scale) {\n const offset = this.offset_scale.scale(this.offset_value);\n if (side === \"bottom\" || side == \"right\") {\n tickSize = -offset;\n tickOffset = is_x ? this.height - offset : this.width - offset;\n }\n else {\n tickSize += offset;\n tickOffset = -offset;\n }\n }\n if (grid_type !== \"none\") {\n this.axis.tickSizeInner(tickSize).tickSizeOuter(6);\n }\n else {\n this.axis.tickSize(6);\n }\n this.g_axisline\n .selectAll(\".tick\")\n .classed(\"short\", grid_type === \"none\");\n this.g_axisline\n .transition(\"update_grid_lines\").duration(animation_duration)\n .call(this.axis)\n .selectAll(\".tick line\")\n .attr(is_x ? \"y1\" : \"x1\", (this.offset_scale && grid_type !== \"none\") ? tickOffset : null)\n .style(\"stroke-dasharray\", grid_type === \"dashed\" ? (\"5, 5\") : null);\n this.apply_tick_styling();\n if (this.model.get(\"grid_color\")) {\n this.g_axisline\n .selectAll(\".tick line\")\n .style(\"stroke\", this.model.get(\"grid_color\"));\n }\n }\n update_color() {\n if (this.model.get(\"color\")) {\n this.d3el.selectAll(\".tick\")\n .selectAll(\"text\")\n .style(\"fill\", this.model.get(\"color\"));\n this.d3el.selectAll(\".domain\")\n .style(\"stroke\", this.model.get(\"color\"));\n }\n }\n redraw_axisline() {\n // TODO: This call might not be necessary\n // TODO: Doesn't do what it states.\n // Has to redraw from a clean slate\n this.update_scales();\n //animate axis and grid lines on domain changes\n const animate = true;\n this.set_tick_values(animate);\n this.update_grid_lines(animate);\n }\n rescale_axis() {\n //function to be called when the range of the axis has been updated\n //or the axis has to be repositioned.\n this.set_scales_range();\n //The following calls to update domains are made as the domain\n //of the axis scale needs to be recalculated as the expansion due\n //to the padding depends on the size of the canvas because of the\n //presence of fixed pixel padding for the bounding box.\n this.update_axis_domain();\n this.update_scales();\n this.g_axisline.attr(\"transform\", this.get_axis_transform());\n this.g_axisline.call(this.axis);\n this.g_axisline.select(\"text.axislabel\")\n .attrs(this.get_label_attributes())\n .styles(this.get_text_styling());\n // TODO: what follows is currently part of redraw_axisline\n this.set_tick_values();\n this.update_grid_lines();\n this.apply_tick_styling();\n }\n update_axis_domain() {\n const initial_range = (this.vertical) ?\n this.parent.padded_range(\"y\", this.axis_scale.model) : this.parent.padded_range(\"x\", this.axis_scale.model);\n const target_range = (this.vertical) ?\n this.parent.range(\"y\") : this.parent.range(\"x\");\n this.axis_scale.expand_domain(initial_range, target_range);\n this.axis.scale(this.axis_scale.scale);\n }\n parent_margin_updated() {\n // sets the new dimensions of the g element for the axis.\n this.rescale_axis();\n }\n update_visibility(model, visible) {\n this.d3el.style(\"display\", visible ? \"inline\" : \"none\");\n }\n get_ticks_from_array_or_length(data_array) {\n // This function is to be called when the ticks are passed explicitly\n // or the number of ticks to be drawn.\n // Have to do different things based on the type of the scale.\n // If an array is passed, then just scale and return equally spaced\n // points in the array. This is the way it is done for ordinal\n // scales.\n let step, max;\n const num_ticks = this.model.get(\"num_ticks\");\n if (this.axis_scale.model.type === \"ordinal\") {\n data_array = this.axis_scale.scale.domain();\n }\n if (num_ticks !== undefined && num_ticks !== null && num_ticks < 2) {\n return [];\n }\n if (data_array) {\n if (num_ticks == undefined || num_ticks == null || data_array.length <= num_ticks) {\n return data_array;\n }\n else {\n step = Math.floor(data_array.length / (num_ticks - 1));\n const indices = _.range(0, data_array.length, step);\n return indices.map((index) => {\n return data_array[index];\n });\n }\n }\n const scale_range = this.axis_scale.scale.domain();\n const max_index = (this.axis_scale.scale.domain().length - 1);\n step = (scale_range[max_index] - scale_range[0]) / (num_ticks - 1);\n if (this.axis_scale.model.type === \"date\" ||\n this.axis_scale.model.type === \"date_color_linear\") {\n //For date scale, the dates have to be converted into milliseconds\n //since epoch time and then back.\n scale_range[0] = scale_range[0].getTime();\n scale_range[max_index] = scale_range[max_index].getTime();\n max = (scale_range[max_index] + (step * 0.5));\n const range_in_times = _.range(scale_range[0], max, step);\n return range_in_times.map((elem) => {\n return new Date(elem);\n });\n }\n else {\n max = (scale_range[max_index] + (step * 0.5));\n return _.range(scale_range[0], max, step);\n }\n }\n set_scale_promise(model) {\n // Sets the child scale\n if (this.axis_scale) {\n this.axis_scale.remove();\n }\n return this.create_child_view(model).then((view) => {\n // Trigger the displayed event of the child view.\n this.displayed.then(() => {\n view.trigger(\"displayed\");\n });\n this.axis_scale = view;\n this.axis_scale.on(\"domain_changed\", this.redraw_axisline, this);\n this.axis_scale.on(\"highlight_axis\", this.highlight, this);\n this.axis_scale.on(\"unhighlight_axis\", this.unhighlight, this);\n });\n }\n update_scale(old, scale) {\n // Called when the child scale changes\n this.axis_scale.off();\n this.set_scale_promise(scale);\n }\n _get_digits(number) {\n return (number === 0) ? 1 : (Math.floor(Math.log10(Math.abs(number))) + 1);\n }\n _replace_trailing_zeros(str) {\n //regex to replace the trailing\n //zeros after the decimal point.\n //Handles the case of exponentially formatted string\n //TODO: Should be done in a single regex\n const e_index = str.search(\"e\");\n if (e_index != -1) {\n return str.substring(0, e_index).replace(/(\\.[0-9]*?)0+$/gi, \"$1\").replace(/\\.$/, \"\") +\n str.substring(e_index);\n }\n else {\n return str.replace(/(\\.[0-9]*?)0+$/gi, \"$1\").replace(/\\.$/, \"\");\n }\n }\n get_format_func(prec) {\n if (prec === 0) {\n // format this as an integer\n return (number) => { return d3.format(\"d\")(Math.round(number)); };\n }\n //if it is -1, then it is a generic format\n const fmt_string = (prec == -1) ? \"\" : (\".\" + (prec));\n return (number) => {\n const str = d3.format(fmt_string + \"g\")(number);\n const reg_str = str.replace(/-|\\.|e/gi, \"\");\n if (reg_str.length < 6) {\n return this._replace_trailing_zeros(str);\n }\n else {\n //if length is more than 6, format it exponentially\n if (fmt_string === \"\") {\n //if fmt_string is \"\", then the number o/p can be\n //arbitrarily large\n let new_str = d3.format(fmt_string + \"e\")(number);\n if (new_str.length >= 7) {\n //in the case of a round off error, setting the max\n //limit to be 6\n new_str = d3.format(\".6e\")(number);\n }\n return this._replace_trailing_zeros(new_str);\n }\n else {\n //Format with the precision required\n return this._replace_trailing_zeros(d3.format(fmt_string + \"e\")(number));\n }\n }\n };\n }\n _linear_scale_precision(ticks) {\n ticks = (ticks === undefined || ticks === null) ? this.axis_scale.scale.ticks() : ticks;\n const diff = Math.abs(ticks[1] - ticks[0]);\n const max = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\n const max_digits = this._get_digits(max);\n // number of digits in the max\n const diff_digits = this._get_digits(diff);\n // number of digits in the min\n const precision = Math.abs(max_digits - diff_digits);\n // difference in the number of digits. The number of digits we have\n // to display is the diff above + 1.\n if (max_digits >= 0 && diff_digits > 0) {\n if (max_digits <= 6) {\n // format the number as an integer\n return 0;\n }\n else {\n // precision plus 1 is returned here as they are the number of\n // digits to be displayed. Capped at 6\n return Math.min(precision, 6) + 1;\n }\n }\n else if (diff_digits <= 0) {\n // return math.abs(diff_digits) + max_digits + 1. Capped at 6.\n return Math.min((Math.abs(diff_digits) + max_digits), 6) + 1;\n }\n }\n linear_sc_format(ticks) {\n return this.get_format_func(this._linear_scale_precision(ticks));\n }\n date_sc_format(ticks) {\n // assumes that scale is a linear date scale\n ticks = (ticks === undefined || ticks === null) ? this.axis_scale.scale.ticks() : ticks;\n // diff is the difference between ticks in milliseconds\n const diff = Math.abs(ticks[1] - ticks[0]);\n const format_millisecond = d3.timeFormat(\".%L\"), format_second = d3.timeFormat(\":%S\"), format_minute = d3.timeFormat(\"%I:%M\"), format_hour = d3.timeFormat(\"%I %p\"), format_day = d3.timeFormat(\"%b %d\"), format_month = d3.timeFormat(\"%b %Y\"), format_year = d3.timeFormat(\"%Y\");\n return (date) => {\n let div = 1000;\n if (Math.floor(diff / div) === 0) {\n //diff is less than a second\n if (d3.timeSecond(date) < date) {\n return format_millisecond(date);\n }\n else if (d3.timeMinute(date) < date) {\n return format_second(date);\n }\n else {\n return format_minute(date);\n }\n }\n else if (Math.floor(diff / (div *= 60)) === 0) {\n //diff is less than a minute\n if (d3.timeMinute(date) < date) {\n return format_second(date);\n }\n else {\n return format_minute(date);\n }\n }\n else if (Math.floor(diff / (div *= 60)) === 0) {\n // diff is less than an hour\n if (d3.timeHour(date) < date) {\n return format_minute(date);\n }\n else {\n return format_hour(date);\n }\n }\n else if (Math.floor(diff / (div *= 24)) === 0) {\n //diff is less than a day\n if (d3.timeDay(date) < date) {\n return format_hour(date);\n }\n else {\n return format_day(date);\n }\n }\n else if (Math.floor(diff / (div *= 27)) === 0) {\n //diff is less than a month\n if (d3.timeMonth(date) < date) {\n return format_day(date);\n }\n else {\n return format_month(date);\n }\n }\n else if (Math.floor(diff / (div *= 12)) === 0) {\n //diff is less than a year\n if (d3.timeMonth(date) < date) {\n return format_day(date);\n }\n else {\n return format_month(date);\n }\n }\n else {\n //diff is more than a year\n if (d3.timeMonth(date) < date) {\n return format_day(date);\n }\n else if (d3.timeYear(date) < date) {\n return format_month(date);\n }\n else {\n return format_year(date);\n }\n }\n };\n }\n log_sc_format(ticks) {\n return this.get_format_func(this._log_sc_precision(ticks));\n }\n _log_sc_precision(ticks) {\n ticks = (ticks === undefined || ticks === null) ? this.axis_scale.scale.ticks() : ticks;\n const ratio = Math.abs(Math.log10(ticks[1] / ticks[0]));\n if (ratio >= 0.3010) {\n //format them as they are with the max_length of 6\n return -1;\n }\n else {\n //return a default of 3 digits of precision\n return 3;\n }\n }\n guess_tick_format(ticks) {\n if (this.axis_scale.model.type == \"linear\" ||\n this.axis_scale.model.type == \"color_linear\") {\n return this.linear_sc_format(ticks);\n }\n else if (this.axis_scale.model.type == \"date\" ||\n this.axis_scale.model.type == \"date_color_linear\") {\n return this.date_sc_format(ticks);\n }\n else if (this.axis_scale.model.type == \"log\") {\n return this.log_sc_format(ticks);\n }\n }\n get width() {\n return this.parent.width - this.parent.margin.right - this.parent.margin.left;\n }\n get height() {\n return this.parent.height - this.parent.margin.top - this.parent.margin.bottom;\n }\n get margin() {\n return this.parent.margin;\n }\n}\nexports.Axis = Axis;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXhpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9BeGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCxnREFBbUQ7QUFDbkQsdUNBQXlCO0FBQ3pCLDhCQUE0QjtBQUM1QixnTEFBZ0w7QUFDaEwsK0NBQWlDO0FBQ2pDLDhDQUFnQztBQUVoQyxrQ0FBa0M7QUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVMsQ0FBQztJQUNqQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNuQyxDQUFDLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFdkMsTUFBYSxJQUFLLFNBQVEsaUJBQVU7SUFFaEMsVUFBVTtRQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFB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","module.exports = isTypedArray\nisTypedArray.strict = isStrictTypedArray\nisTypedArray.loose = isLooseTypedArray\n\nvar toString = Object.prototype.toString\nvar names = {\n '[object Int8Array]': true\n , '[object Int16Array]': true\n , '[object Int32Array]': true\n , '[object Uint8Array]': true\n , '[object Uint8ClampedArray]': true\n , '[object Uint16Array]': true\n , '[object Uint32Array]': true\n , '[object Float32Array]': true\n , '[object Float64Array]': true\n}\n\nfunction isTypedArray(arr) {\n return (\n isStrictTypedArray(arr)\n || isLooseTypedArray(arr)\n )\n}\n\nfunction isStrictTypedArray(arr) {\n return (\n arr instanceof Int8Array\n || arr instanceof Int16Array\n || arr instanceof Int32Array\n || arr instanceof Uint8Array\n || arr instanceof Uint8ClampedArray\n || arr instanceof Uint16Array\n || arr instanceof Uint32Array\n || arr instanceof Float32Array\n || arr instanceof Float64Array\n )\n}\n\nfunction isLooseTypedArray(arr) {\n return names[toString.call(arr)]\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","\"use strict\";\r\nfunction __export(m) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\n__export(require(\"./boxengine\"));\r\n__export(require(\"./boxlayout\"));\r\n__export(require(\"./boxpanel\"));\r\n__export(require(\"./commandpalette\"));\r\n__export(require(\"./contextmenu\"));\r\n__export(require(\"./docklayout\"));\r\n__export(require(\"./dockpanel\"));\r\n__export(require(\"./focustracker\"));\r\n__export(require(\"./gridlayout\"));\r\n__export(require(\"./layout\"));\r\n__export(require(\"./menu\"));\r\n__export(require(\"./menubar\"));\r\n__export(require(\"./panel\"));\r\n__export(require(\"./panellayout\"));\r\n__export(require(\"./scrollbar\"));\r\n__export(require(\"./singletonlayout\"));\r\n__export(require(\"./splitlayout\"));\r\n__export(require(\"./splitpanel\"));\r\n__export(require(\"./stackedlayout\"));\r\n__export(require(\"./stackedpanel\"));\r\n__export(require(\"./tabbar\"));\r\n__export(require(\"./tabpanel\"));\r\n__export(require(\"./title\"));\r\n__export(require(\"./widget\"));\r\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The namespace for random number related functionality.\n */\nvar Random;\n(function (Random) {\n /**\n * A function which generates random bytes.\n *\n * @param buffer - The `Uint8Array` to fill with random bytes.\n *\n * #### Notes\n * A cryptographically strong random number generator will be used if\n * available. Otherwise, `Math.random` will be used as a fallback for\n * randomness.\n *\n * The following RNGs are supported, listed in order of precedence:\n * - `window.crypto.getRandomValues`\n * - `window.msCrypto.getRandomValues`\n * - `require('crypto').randomFillSync\n * - `require('crypto').randomBytes\n * - `Math.random`\n */\n Random.getRandomValues = (function () {\n // Look up the crypto module if available.\n var crypto = ((typeof window !== 'undefined' && (window.crypto || window.msCrypto)) ||\n (typeof require !== 'undefined' && require('crypto')) || null);\n // Modern browsers and IE 11\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return function getRandomValues(buffer) {\n return crypto.getRandomValues(buffer);\n };\n }\n // Node 7+\n if (crypto && typeof crypto.randomFillSync === 'function') {\n return function getRandomValues(buffer) {\n return crypto.randomFillSync(buffer);\n };\n }\n // Node 0.10+\n if (crypto && typeof crypto.randomBytes === 'function') {\n return function getRandomValues(buffer) {\n var bytes = crypto.randomBytes(buffer.length);\n for (var i = 0, n = bytes.length; i < n; ++i) {\n buffer[i] = bytes[i];\n }\n };\n }\n // Fallback\n return function getRandomValues(buffer) {\n var value = 0;\n for (var i = 0, n = buffer.length; i < n; ++i) {\n if (i % 4 === 0) {\n value = Math.random() * 0xFFFFFFFF >>> 0;\n }\n buffer[i] = value & 0xFF;\n value >>>= 8;\n }\n };\n })();\n})(Random = exports.Random || (exports.Random = {}));\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nfunction checkBuffer (buf, name) {\n if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {\n throw new TypeError(name + ' must be a buffer or string')\n }\n}\n\nmodule.exports = function (password, salt, iterations, keylen) {\n checkBuffer(password, 'Password')\n checkBuffer(salt, 'Salt')\n\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(password, salt, iterations, keylen)\n\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar coreutils_1 = require(\"@phosphor/coreutils\");\r\nvar disposable_1 = require(\"@phosphor/disposable\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar keyboard_1 = require(\"@phosphor/keyboard\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\n/**\r\n * An object which manages a collection of commands.\r\n *\r\n * #### Notes\r\n * A command registry can be used to populate a variety of action-based\r\n * widgets, such as command palettes, menus, and toolbars.\r\n */\r\nvar CommandRegistry = /** @class */ (function () {\r\n /**\r\n * Construct a new command registry.\r\n */\r\n function CommandRegistry() {\r\n this._timerID = 0;\r\n this._replaying = false;\r\n this._keystrokes = [];\r\n this._keydownEvents = [];\r\n this._keyBindings = [];\r\n this._exactKeyMatch = null;\r\n this._commands = Object.create(null);\r\n this._commandChanged = new signaling_1.Signal(this);\r\n this._commandExecuted = new signaling_1.Signal(this);\r\n this._keyBindingChanged = new signaling_1.Signal(this);\r\n }\r\n Object.defineProperty(CommandRegistry.prototype, \"commandChanged\", {\r\n /**\r\n * A signal emitted when a command has changed.\r\n *\r\n * #### Notes\r\n * This signal is useful for visual representations of commands which\r\n * need to refresh when the state of a relevant command has changed.\r\n */\r\n get: function () {\r\n return this._commandChanged;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandRegistry.prototype, \"commandExecuted\", {\r\n /**\r\n * A signal emitted when a command has executed.\r\n *\r\n * #### Notes\r\n * Care should be taken when consuming this signal. It is intended to\r\n * be used largely for debugging and logging purposes. It should not\r\n * be (ab)used for general purpose spying on command execution.\r\n */\r\n get: function () {\r\n return this._commandExecuted;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandRegistry.prototype, \"keyBindingChanged\", {\r\n /**\r\n * A signal emitted when a key binding is changed.\r\n */\r\n get: function () {\r\n return this._keyBindingChanged;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandRegistry.prototype, \"keyBindings\", {\r\n /**\r\n * A read-only array of the key bindings in the registry.\r\n */\r\n get: function () {\r\n return this._keyBindings;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * List the ids of the registered commands.\r\n *\r\n * @returns A new array of the registered command ids.\r\n */\r\n CommandRegistry.prototype.listCommands = function () {\r\n return Object.keys(this._commands);\r\n };\r\n /**\r\n * Test whether a specific command is registered.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @returns `true` if the command is registered, `false` otherwise.\r\n */\r\n CommandRegistry.prototype.hasCommand = function (id) {\r\n return id in this._commands;\r\n };\r\n /**\r\n * Add a command to the registry.\r\n *\r\n * @param id - The unique id of the command.\r\n *\r\n * @param options - The options for the command.\r\n *\r\n * @returns A disposable which will remove the command.\r\n *\r\n * @throws An error if the given `id` is already registered.\r\n */\r\n CommandRegistry.prototype.addCommand = function (id, options) {\r\n var _this = this;\r\n // Throw an error if the id is already registered.\r\n if (id in this._commands) {\r\n throw new Error(\"Command '\" + id + \"' already registered.\");\r\n }\r\n // Add the command to the registry.\r\n this._commands[id] = Private.createCommand(options);\r\n // Emit the `commandChanged` signal.\r\n this._commandChanged.emit({ id: id, type: 'added' });\r\n // Return a disposable which will remove the command.\r\n return new disposable_1.DisposableDelegate(function () {\r\n // Remove the command from the registry.\r\n delete _this._commands[id];\r\n // Emit the `commandChanged` signal.\r\n _this._commandChanged.emit({ id: id, type: 'removed' });\r\n });\r\n };\r\n /**\r\n * Notify listeners that the state of a command has changed.\r\n *\r\n * @param id - The id of the command which has changed. If more than\r\n * one command has changed, this argument should be omitted.\r\n *\r\n * @throws An error if the given `id` is not registered.\r\n *\r\n * #### Notes\r\n * This method should be called by the command author whenever the\r\n * application state changes such that the results of the command\r\n * metadata functions may have changed.\r\n *\r\n * This will cause the `commandChanged` signal to be emitted.\r\n */\r\n CommandRegistry.prototype.notifyCommandChanged = function (id) {\r\n if (id !== undefined && !(id in this._commands)) {\r\n throw new Error(\"Command '\" + id + \"' is not registered.\");\r\n }\r\n this._commandChanged.emit({ id: id, type: id ? 'changed' : 'many-changed' });\r\n };\r\n /**\r\n * Get the display label for a specific command.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns The display label for the command, or an empty string\r\n * if the command is not registered.\r\n */\r\n CommandRegistry.prototype.label = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.label.call(undefined, args) : '';\r\n };\r\n /**\r\n * Get the mnemonic index for a specific command.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns The mnemonic index for the command, or `-1` if the\r\n * command is not registered.\r\n */\r\n CommandRegistry.prototype.mnemonic = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.mnemonic.call(undefined, args) : -1;\r\n };\r\n /**\r\n * @deprecated Use `iconClass()` instead.\r\n */\r\n CommandRegistry.prototype.icon = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n return this.iconClass(id, args);\r\n };\r\n /**\r\n * Get the icon class for a specific command.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns The icon class for the command, or an empty string if\r\n * the command is not registered.\r\n */\r\n CommandRegistry.prototype.iconClass = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.iconClass.call(undefined, args) : '';\r\n };\r\n /**\r\n * Get the icon label for a specific command.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns The icon label for the command, or an empty string if\r\n * the command is not registered.\r\n */\r\n CommandRegistry.prototype.iconLabel = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.iconLabel.call(undefined, args) : '';\r\n };\r\n /**\r\n * Get the short form caption for a specific command.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns The caption for the command, or an empty string if the\r\n * command is not registered.\r\n */\r\n CommandRegistry.prototype.caption = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.caption.call(undefined, args) : '';\r\n };\r\n /**\r\n * Get the usage help text for a specific command.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns The usage text for the command, or an empty string if\r\n * the command is not registered.\r\n */\r\n CommandRegistry.prototype.usage = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.usage.call(undefined, args) : '';\r\n };\r\n /**\r\n * Get the extra class name for a specific command.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns The class name for the command, or an empty string if\r\n * the command is not registered.\r\n */\r\n CommandRegistry.prototype.className = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.className.call(undefined, args) : '';\r\n };\r\n /**\r\n * Get the dataset for a specific command.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns The dataset for the command, or an empty dataset if\r\n * the command is not registered.\r\n */\r\n CommandRegistry.prototype.dataset = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.dataset.call(undefined, args) : {};\r\n };\r\n /**\r\n * Test whether a specific command is enabled.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns A boolean indicating whether the command is enabled,\r\n * or `false` if the command is not registered.\r\n */\r\n CommandRegistry.prototype.isEnabled = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.isEnabled.call(undefined, args) : false;\r\n };\r\n /**\r\n * Test whether a specific command is toggled.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns A boolean indicating whether the command is toggled,\r\n * or `false` if the command is not registered.\r\n */\r\n CommandRegistry.prototype.isToggled = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.isToggled.call(undefined, args) : false;\r\n };\r\n /**\r\n * Test whether a specific command is visible.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns A boolean indicating whether the command is visible,\r\n * or `false` if the command is not registered.\r\n */\r\n CommandRegistry.prototype.isVisible = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n var cmd = this._commands[id];\r\n return cmd ? cmd.isVisible.call(undefined, args) : false;\r\n };\r\n /**\r\n * Execute a specific command.\r\n *\r\n * @param id - The id of the command of interest.\r\n *\r\n * @param args - The arguments for the command.\r\n *\r\n * @returns A promise which resolves with the result of the command.\r\n *\r\n * #### Notes\r\n * The promise will reject if the command throws an exception,\r\n * or if the command is not registered.\r\n */\r\n CommandRegistry.prototype.execute = function (id, args) {\r\n if (args === void 0) { args = coreutils_1.JSONExt.emptyObject; }\r\n // Reject if the command is not registered.\r\n var cmd = this._commands[id];\r\n if (!cmd) {\r\n return Promise.reject(new Error(\"Command '\" + id + \"' not registered.\"));\r\n }\r\n // Execute the command and reject if an exception is thrown.\r\n var value;\r\n try {\r\n value = cmd.execute.call(undefined, args);\r\n }\r\n catch (err) {\r\n value = Promise.reject(err);\r\n }\r\n // Create the return promise which resolves the result.\r\n var result = Promise.resolve(value);\r\n // Emit the command executed signal.\r\n this._commandExecuted.emit({ id: id, args: args, result: result });\r\n // Return the result promise to the caller.\r\n return result;\r\n };\r\n /**\r\n * Add a key binding to the registry.\r\n *\r\n * @param options - The options for creating the key binding.\r\n *\r\n * @returns A disposable which removes the added key binding.\r\n *\r\n * #### Notes\r\n * If multiple key bindings are registered for the same sequence, the\r\n * binding with the highest selector specificity is executed first. A\r\n * tie is broken by using the most recently added key binding.\r\n *\r\n * Ambiguous key bindings are resolved with a timeout. As an example,\r\n * suppose two key bindings are registered: one with the key sequence\r\n * `['Ctrl D']`, and another with `['Ctrl D', 'Ctrl W']`. If the user\r\n * presses `Ctrl D`, the first binding cannot be immediately executed\r\n * since the user may intend to complete the chord with `Ctrl W`. For\r\n * such cases, a timer is used to allow the chord to be completed. If\r\n * the chord is not completed before the timeout, the first binding\r\n * is executed.\r\n */\r\n CommandRegistry.prototype.addKeyBinding = function (options) {\r\n var _this = this;\r\n // Create the binding for the given options.\r\n var binding = Private.createKeyBinding(options);\r\n // Add the key binding to the bindings array.\r\n this._keyBindings.push(binding);\r\n // Emit the `bindingChanged` signal.\r\n this._keyBindingChanged.emit({ binding: binding, type: 'added' });\r\n // Return a disposable which will remove the binding.\r\n return new disposable_1.DisposableDelegate(function () {\r\n // Remove the binding from the array.\r\n algorithm_1.ArrayExt.removeFirstOf(_this._keyBindings, binding);\r\n // Emit the `bindingChanged` signal.\r\n _this._keyBindingChanged.emit({ binding: binding, type: 'removed' });\r\n });\r\n };\r\n /**\r\n * Process a `'keydown'` event and invoke a matching key binding.\r\n *\r\n * @param event - The event object for a `'keydown'` event.\r\n *\r\n * #### Notes\r\n * This should be called in response to a `'keydown'` event in order\r\n * to invoke the command for the best matching key binding.\r\n *\r\n * The registry **does not** install its own listener for `'keydown'`\r\n * events. This allows the application full control over the nodes\r\n * and phase for which the registry processes `'keydown'` events.\r\n */\r\n CommandRegistry.prototype.processKeydownEvent = function (event) {\r\n // Bail immediately if playing back keystrokes.\r\n if (this._replaying) {\r\n return;\r\n }\r\n // Get the normalized keystroke for the event.\r\n var keystroke = CommandRegistry.keystrokeForKeydownEvent(event);\r\n // If the keystroke is not valid for the keyboard layout, replay\r\n // any suppressed events and clear the pending state.\r\n if (!keystroke) {\r\n this._replayKeydownEvents();\r\n this._clearPendingState();\r\n return;\r\n }\r\n // Add the keystroke to the current key sequence.\r\n this._keystrokes.push(keystroke);\r\n // Find the exact and partial matches for the key sequence.\r\n var _a = Private.matchKeyBinding(this._keyBindings, this._keystrokes, event), exact = _a.exact, partial = _a.partial;\r\n // If there is no exact match and no partial match, replay\r\n // any suppressed events and clear the pending state.\r\n if (!exact && !partial) {\r\n this._replayKeydownEvents();\r\n this._clearPendingState();\r\n return;\r\n }\r\n // Stop propagation of the event. If there is only a partial match,\r\n // the event will be replayed if a final exact match never occurs.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // If there is an exact match but no partial match, the exact match\r\n // can be dispatched immediately. The pending state is cleared so\r\n // the next key press starts from the default state.\r\n if (exact && !partial) {\r\n this._executeKeyBinding(exact);\r\n this._clearPendingState();\r\n return;\r\n }\r\n // If there is both an exact match and a partial match, the exact\r\n // match is stored for future dispatch in case the timer expires\r\n // before a more specific match is triggered.\r\n if (exact) {\r\n this._exactKeyMatch = exact;\r\n }\r\n // Store the event for possible playback in the future.\r\n this._keydownEvents.push(event);\r\n // (Re)start the timer to dispatch the most recent exact match\r\n // in case the partial match fails to result in an exact match.\r\n this._startTimer();\r\n };\r\n /**\r\n * Start or restart the pending timeout.\r\n */\r\n CommandRegistry.prototype._startTimer = function () {\r\n var _this = this;\r\n this._clearTimer();\r\n this._timerID = window.setTimeout(function () {\r\n _this._onPendingTimeout();\r\n }, Private.CHORD_TIMEOUT);\r\n };\r\n /**\r\n * Clear the pending timeout.\r\n */\r\n CommandRegistry.prototype._clearTimer = function () {\r\n if (this._timerID !== 0) {\r\n clearTimeout(this._timerID);\r\n this._timerID = 0;\r\n }\r\n };\r\n /**\r\n * Replay the keydown events which were suppressed.\r\n */\r\n CommandRegistry.prototype._replayKeydownEvents = function () {\r\n if (this._keydownEvents.length === 0) {\r\n return;\r\n }\r\n this._replaying = true;\r\n this._keydownEvents.forEach(Private.replayKeyEvent);\r\n this._replaying = false;\r\n };\r\n /**\r\n * Execute the command for the given key binding.\r\n *\r\n * If the command is missing or disabled, a warning will be logged.\r\n */\r\n CommandRegistry.prototype._executeKeyBinding = function (binding) {\r\n var command = binding.command, args = binding.args;\r\n if (!this.hasCommand(command) || !this.isEnabled(command, args)) {\r\n var word = this.hasCommand(command) ? 'enabled' : 'registered';\r\n var keys = binding.keys.join(', ');\r\n var msg1 = \"Cannot execute key binding '\" + keys + \"':\";\r\n var msg2 = \"command '\" + command + \"' is not \" + word + \".\";\r\n console.warn(msg1 + \" \" + msg2);\r\n return;\r\n }\r\n this.execute(command, args);\r\n };\r\n /**\r\n * Clear the internal pending state.\r\n */\r\n CommandRegistry.prototype._clearPendingState = function () {\r\n this._clearTimer();\r\n this._exactKeyMatch = null;\r\n this._keystrokes.length = 0;\r\n this._keydownEvents.length = 0;\r\n };\r\n /**\r\n * Handle the partial match timeout.\r\n */\r\n CommandRegistry.prototype._onPendingTimeout = function () {\r\n this._timerID = 0;\r\n if (this._exactKeyMatch) {\r\n this._executeKeyBinding(this._exactKeyMatch);\r\n }\r\n else {\r\n this._replayKeydownEvents();\r\n }\r\n this._clearPendingState();\r\n };\r\n return CommandRegistry;\r\n}());\r\nexports.CommandRegistry = CommandRegistry;\r\n/**\r\n * The namespace for the `CommandRegistry` class statics.\r\n */\r\n(function (CommandRegistry) {\r\n /**\r\n * Parse a keystroke into its constituent components.\r\n *\r\n * @param keystroke - The keystroke of interest.\r\n *\r\n * @returns The parsed components of the keystroke.\r\n *\r\n * #### Notes\r\n * The keystroke should be of the form:\r\n * `[<modifier 1> [<modifier 2> [<modifier N> ]]]<primary key>`\r\n *\r\n * The supported modifiers are: `Accel`, `Alt`, `Cmd`, `Ctrl`, and\r\n * `Shift`. The `Accel` modifier is translated to `Cmd` on Mac and\r\n * `Ctrl` on all other platforms.\r\n *\r\n * The parsing is tolerant and will not throw exceptions. Notably:\r\n * - Duplicate modifiers are ignored.\r\n * - Extra primary keys are ignored.\r\n * - The order of modifiers and primary key is irrelevant.\r\n * - The keystroke parts should be separated by whitespace.\r\n * - The keystroke is case sensitive.\r\n */\r\n function parseKeystroke(keystroke) {\r\n var key = '';\r\n var alt = false;\r\n var cmd = false;\r\n var ctrl = false;\r\n var shift = false;\r\n for (var _i = 0, _a = keystroke.split(/\\s+/); _i < _a.length; _i++) {\r\n var token = _a[_i];\r\n if (token === 'Accel') {\r\n if (domutils_1.Platform.IS_MAC) {\r\n cmd = true;\r\n }\r\n else {\r\n ctrl = true;\r\n }\r\n }\r\n else if (token === 'Alt') {\r\n alt = true;\r\n }\r\n else if (token === 'Cmd') {\r\n cmd = true;\r\n }\r\n else if (token === 'Ctrl') {\r\n ctrl = true;\r\n }\r\n else if (token === 'Shift') {\r\n shift = true;\r\n }\r\n else if (token.length > 0) {\r\n key = token;\r\n }\r\n }\r\n return { cmd: cmd, ctrl: ctrl, alt: alt, shift: shift, key: key };\r\n }\r\n CommandRegistry.parseKeystroke = parseKeystroke;\r\n /**\r\n * Normalize a keystroke into a canonical representation.\r\n *\r\n * @param keystroke - The keystroke of interest.\r\n *\r\n * @returns The normalized representation of the keystroke.\r\n *\r\n * #### Notes\r\n * This normalizes the keystroke by removing duplicate modifiers and\r\n * extra primary keys, and assembling the parts in a canonical order.\r\n *\r\n * The `Cmd` modifier is ignored on non-Mac platforms.\r\n */\r\n function normalizeKeystroke(keystroke) {\r\n var mods = '';\r\n var parts = parseKeystroke(keystroke);\r\n if (parts.ctrl) {\r\n mods += 'Ctrl ';\r\n }\r\n if (parts.alt) {\r\n mods += 'Alt ';\r\n }\r\n if (parts.shift) {\r\n mods += 'Shift ';\r\n }\r\n if (parts.cmd && domutils_1.Platform.IS_MAC) {\r\n mods += 'Cmd ';\r\n }\r\n return mods + parts.key;\r\n }\r\n CommandRegistry.normalizeKeystroke = normalizeKeystroke;\r\n /**\r\n * Format a keystroke for display on the local system.\r\n */\r\n function formatKeystroke(keystroke) {\r\n var mods = '';\r\n var parts = parseKeystroke(keystroke);\r\n if (domutils_1.Platform.IS_MAC) {\r\n if (parts.ctrl) {\r\n mods += '\\u2303 ';\r\n }\r\n if (parts.alt) {\r\n mods += '\\u2325 ';\r\n }\r\n if (parts.shift) {\r\n mods += '\\u21E7 ';\r\n }\r\n if (parts.cmd) {\r\n mods += '\\u2318 ';\r\n }\r\n }\r\n else {\r\n if (parts.ctrl) {\r\n mods += 'Ctrl+';\r\n }\r\n if (parts.alt) {\r\n mods += 'Alt+';\r\n }\r\n if (parts.shift) {\r\n mods += 'Shift+';\r\n }\r\n }\r\n return mods + parts.key;\r\n }\r\n CommandRegistry.formatKeystroke = formatKeystroke;\r\n /**\r\n * Create a normalized keystroke for a `'keydown'` event.\r\n *\r\n * @param event - The event object for a `'keydown'` event.\r\n *\r\n * @returns A normalized keystroke, or an empty string if the event\r\n * does not represent a valid keystroke for the given layout.\r\n */\r\n function keystrokeForKeydownEvent(event) {\r\n var key = keyboard_1.getKeyboardLayout().keyForKeydownEvent(event);\r\n if (!key) {\r\n return '';\r\n }\r\n var mods = '';\r\n if (event.ctrlKey) {\r\n mods += 'Ctrl ';\r\n }\r\n if (event.altKey) {\r\n mods += 'Alt ';\r\n }\r\n if (event.shiftKey) {\r\n mods += 'Shift ';\r\n }\r\n if (event.metaKey && domutils_1.Platform.IS_MAC) {\r\n mods += 'Cmd ';\r\n }\r\n return mods + key;\r\n }\r\n CommandRegistry.keystrokeForKeydownEvent = keystrokeForKeydownEvent;\r\n})(CommandRegistry = exports.CommandRegistry || (exports.CommandRegistry = {}));\r\nexports.CommandRegistry = CommandRegistry;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * The timeout in ms for triggering a key binding chord.\r\n */\r\n Private.CHORD_TIMEOUT = 1000;\r\n /**\r\n * Create a normalized command from an options object.\r\n */\r\n function createCommand(options) {\r\n return {\r\n execute: options.execute,\r\n label: asFunc(options.label, emptyStringFunc),\r\n mnemonic: asFunc(options.mnemonic, negativeOneFunc),\r\n iconClass: asFunc(options.iconClass || options.icon, emptyStringFunc),\r\n iconLabel: asFunc(options.iconLabel, emptyStringFunc),\r\n caption: asFunc(options.caption, emptyStringFunc),\r\n usage: asFunc(options.usage, emptyStringFunc),\r\n className: asFunc(options.className, emptyStringFunc),\r\n dataset: asFunc(options.dataset, emptyDatasetFunc),\r\n isEnabled: options.isEnabled || trueFunc,\r\n isToggled: options.isToggled || falseFunc,\r\n isVisible: options.isVisible || trueFunc\r\n };\r\n }\r\n Private.createCommand = createCommand;\r\n /**\r\n * Create a key binding object from key binding options.\r\n */\r\n function createKeyBinding(options) {\r\n return {\r\n keys: normalizeKeys(options),\r\n selector: validateSelector(options),\r\n command: options.command,\r\n args: options.args || coreutils_1.JSONExt.emptyObject\r\n };\r\n }\r\n Private.createKeyBinding = createKeyBinding;\r\n /**\r\n * Find the key bindings which match a key sequence.\r\n *\r\n * This returns a match result which contains the best exact matching\r\n * binding, and a flag which indicates if there are partial matches.\r\n */\r\n function matchKeyBinding(bindings, keys, event) {\r\n // The current best exact match.\r\n var exact = null;\r\n // Whether a partial match has been found.\r\n var partial = false;\r\n // The match distance for the exact match.\r\n var distance = Infinity;\r\n // The specificity for the exact match.\r\n var specificity = 0;\r\n // Iterate over the bindings and search for the best match.\r\n for (var i = 0, n = bindings.length; i < n; ++i) {\r\n // Lookup the current binding.\r\n var binding = bindings[i];\r\n // Check whether the key binding sequence is a match.\r\n var sqm = matchSequence(binding.keys, keys);\r\n // If there is no match, the binding is ignored.\r\n if (sqm === 0 /* None */) {\r\n continue;\r\n }\r\n // If it is a partial match and no other partial match has been\r\n // found, ensure the selector matches and set the partial flag.\r\n if (sqm === 2 /* Partial */) {\r\n if (!partial && targetDistance(binding.selector, event) !== -1) {\r\n partial = true;\r\n }\r\n continue;\r\n }\r\n // Ignore the match if the selector doesn't match, or if the\r\n // matched node is farther away than the current best match.\r\n var td = targetDistance(binding.selector, event);\r\n if (td === -1 || td > distance) {\r\n continue;\r\n }\r\n // Get the specificity for the selector.\r\n var sp = domutils_1.Selector.calculateSpecificity(binding.selector);\r\n // Update the best match if this match is stronger.\r\n if (!exact || td < distance || sp >= specificity) {\r\n exact = binding;\r\n distance = td;\r\n specificity = sp;\r\n }\r\n }\r\n // Return the match result.\r\n return { exact: exact, partial: partial };\r\n }\r\n Private.matchKeyBinding = matchKeyBinding;\r\n /**\r\n * Replay a keyboard event.\r\n *\r\n * This synthetically dispatches a clone of the keyboard event.\r\n */\r\n function replayKeyEvent(event) {\r\n event.target.dispatchEvent(cloneKeyboardEvent(event));\r\n }\r\n Private.replayKeyEvent = replayKeyEvent;\r\n /**\r\n * A singleton empty string function.\r\n */\r\n var emptyStringFunc = function () { return ''; };\r\n /**\r\n * A singleton `-1` number function\r\n */\r\n var negativeOneFunc = function () { return -1; };\r\n /**\r\n * A singleton true boolean function.\r\n */\r\n var trueFunc = function () { return true; };\r\n /**\r\n * A singleton false boolean function.\r\n */\r\n var falseFunc = function () { return false; };\r\n /**\r\n * A singleton empty dataset function.\r\n */\r\n var emptyDatasetFunc = function () { return ({}); };\r\n /**\r\n * Cast a value or command func to a command func.\r\n */\r\n function asFunc(value, dfault) {\r\n if (value === undefined) {\r\n return dfault;\r\n }\r\n if (typeof value === 'function') {\r\n return value;\r\n }\r\n return function () { return value; };\r\n }\r\n /**\r\n * Get the platform-specific normalized keys for an options object.\r\n */\r\n function normalizeKeys(options) {\r\n var keys;\r\n if (domutils_1.Platform.IS_WIN) {\r\n keys = options.winKeys || options.keys;\r\n }\r\n else if (domutils_1.Platform.IS_MAC) {\r\n keys = options.macKeys || options.keys;\r\n }\r\n else {\r\n keys = options.linuxKeys || options.keys;\r\n }\r\n return keys.map(CommandRegistry.normalizeKeystroke);\r\n }\r\n /**\r\n * Validate the selector for an options object.\r\n *\r\n * This returns the validated selector, or throws if the selector is\r\n * invalid or contains commas.\r\n */\r\n function validateSelector(options) {\r\n if (options.selector.indexOf(',') !== -1) {\r\n throw new Error(\"Selector cannot contain commas: \" + options.selector);\r\n }\r\n if (!domutils_1.Selector.isValid(options.selector)) {\r\n throw new Error(\"Invalid selector: \" + options.selector);\r\n }\r\n return options.selector;\r\n }\r\n ;\r\n /**\r\n * Test whether a key binding sequence matches a key sequence.\r\n *\r\n * Returns a `SequenceMatch` value indicating the type of match.\r\n */\r\n function matchSequence(bindKeys, userKeys) {\r\n if (bindKeys.length < userKeys.length) {\r\n return 0 /* None */;\r\n }\r\n for (var i = 0, n = userKeys.length; i < n; ++i) {\r\n if (bindKeys[i] !== userKeys[i]) {\r\n return 0 /* None */;\r\n }\r\n }\r\n if (bindKeys.length > userKeys.length) {\r\n return 2 /* Partial */;\r\n }\r\n return 1 /* Exact */;\r\n }\r\n /**\r\n * Find the distance from the target node to the first matching node.\r\n *\r\n * This traverses the event path from `target` to `currentTarget` and\r\n * computes the distance from `target` to the first node which matches\r\n * the CSS selector. If no match is found, `-1` is returned.\r\n */\r\n function targetDistance(selector, event) {\r\n var targ = event.target;\r\n var curr = event.currentTarget;\r\n for (var dist = 0; targ !== null; targ = targ.parentElement, ++dist) {\r\n if (domutils_1.Selector.matches(targ, selector)) {\r\n return dist;\r\n }\r\n if (targ === curr) {\r\n return -1;\r\n }\r\n }\r\n return -1;\r\n }\r\n /**\r\n * Clone a keyboard event.\r\n */\r\n function cloneKeyboardEvent(event) {\r\n // A custom event is required because Chrome nulls out the\r\n // `keyCode` field in user-generated `KeyboardEvent` types.\r\n var clone = document.createEvent('Event');\r\n var bubbles = event.bubbles || true;\r\n var cancelable = event.cancelable || true;\r\n clone.initEvent(event.type || 'keydown', bubbles, cancelable);\r\n clone.key = event.key || '';\r\n clone.keyCode = event.keyCode || 0;\r\n clone.which = event.keyCode || 0;\r\n clone.ctrlKey = event.ctrlKey || false;\r\n clone.altKey = event.altKey || false;\r\n clone.shiftKey = event.shiftKey || false;\r\n clone.metaKey = event.metaKey || false;\r\n clone.view = event.view || window;\r\n return clone;\r\n }\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar commands_1 = require(\"@phosphor/commands\");\r\nvar coreutils_1 = require(\"@phosphor/coreutils\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar keyboard_1 = require(\"@phosphor/keyboard\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\nvar virtualdom_1 = require(\"@phosphor/virtualdom\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A widget which displays items as a canonical menu.\r\n */\r\nvar Menu = /** @class */ (function (_super) {\r\n __extends(Menu, _super);\r\n /**\r\n * Construct a new menu.\r\n *\r\n * @param options - The options for initializing the menu.\r\n */\r\n function Menu(options) {\r\n var _this = _super.call(this, { node: Private.createNode() }) || this;\r\n _this._childIndex = -1;\r\n _this._activeIndex = -1;\r\n _this._openTimerID = 0;\r\n _this._closeTimerID = 0;\r\n _this._items = [];\r\n _this._childMenu = null;\r\n _this._parentMenu = null;\r\n _this._aboutToClose = new signaling_1.Signal(_this);\r\n _this._menuRequested = new signaling_1.Signal(_this);\r\n _this.addClass('p-Menu');\r\n _this.setFlag(widget_1.Widget.Flag.DisallowLayout);\r\n _this.commands = options.commands;\r\n _this.renderer = options.renderer || Menu.defaultRenderer;\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the menu.\r\n */\r\n Menu.prototype.dispose = function () {\r\n this.close();\r\n this._items.length = 0;\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(Menu.prototype, \"aboutToClose\", {\r\n /**\r\n * A signal emitted just before the menu is closed.\r\n *\r\n * #### Notes\r\n * This signal is emitted when the menu receives a `'close-request'`\r\n * message, just before it removes itself from the DOM.\r\n *\r\n * This signal is not emitted if the menu is already detached from\r\n * the DOM when it receives the `'close-request'` message.\r\n */\r\n get: function () {\r\n return this._aboutToClose;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"menuRequested\", {\r\n /**\r\n * A signal emitted when a new menu is requested by the user.\r\n *\r\n * #### Notes\r\n * This signal is emitted whenever the user presses the right or left\r\n * arrow keys, and a submenu cannot be opened or closed in response.\r\n *\r\n * This signal is useful when implementing menu bars in order to open\r\n * the next or previous menu in response to a user key press.\r\n *\r\n * This signal is only emitted for the root menu in a hierarchy.\r\n */\r\n get: function () {\r\n return this._menuRequested;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"parentMenu\", {\r\n /**\r\n * The parent menu of the menu.\r\n *\r\n * #### Notes\r\n * This is `null` unless the menu is an open submenu.\r\n */\r\n get: function () {\r\n return this._parentMenu;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"childMenu\", {\r\n /**\r\n * The child menu of the menu.\r\n *\r\n * #### Notes\r\n * This is `null` unless the menu has an open submenu.\r\n */\r\n get: function () {\r\n return this._childMenu;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"rootMenu\", {\r\n /**\r\n * The root menu of the menu hierarchy.\r\n */\r\n get: function () {\r\n var menu = this;\r\n while (menu._parentMenu) {\r\n menu = menu._parentMenu;\r\n }\r\n return menu;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"leafMenu\", {\r\n /**\r\n * The leaf menu of the menu hierarchy.\r\n */\r\n get: function () {\r\n var menu = this;\r\n while (menu._childMenu) {\r\n menu = menu._childMenu;\r\n }\r\n return menu;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"contentNode\", {\r\n /**\r\n * The menu content node.\r\n *\r\n * #### Notes\r\n * This is the node which holds the menu item nodes.\r\n *\r\n * Modifying this node directly can lead to undefined behavior.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-Menu-content')[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"activeItem\", {\r\n /**\r\n * Get the currently active menu item.\r\n */\r\n get: function () {\r\n return this._items[this._activeIndex] || null;\r\n },\r\n /**\r\n * Set the currently active menu item.\r\n *\r\n * #### Notes\r\n * If the item cannot be activated, the item will be set to `null`.\r\n */\r\n set: function (value) {\r\n this.activeIndex = value ? this._items.indexOf(value) : -1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"activeIndex\", {\r\n /**\r\n * Get the index of the currently active menu item.\r\n *\r\n * #### Notes\r\n * This will be `-1` if no menu item is active.\r\n */\r\n get: function () {\r\n return this._activeIndex;\r\n },\r\n /**\r\n * Set the index of the currently active menu item.\r\n *\r\n * #### Notes\r\n * If the item cannot be activated, the index will be set to `-1`.\r\n */\r\n set: function (value) {\r\n // Adjust the value for an out of range index.\r\n if (value < 0 || value >= this._items.length) {\r\n value = -1;\r\n }\r\n // Ensure the item can be activated.\r\n if (value !== -1 && !Private.canActivate(this._items[value])) {\r\n value = -1;\r\n }\r\n // Bail if the index will not change.\r\n if (this._activeIndex === value) {\r\n return;\r\n }\r\n // Update the active index.\r\n this._activeIndex = value;\r\n // schedule an update of the items.\r\n this.update();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Menu.prototype, \"items\", {\r\n /**\r\n * A read-only array of the menu items in the menu.\r\n */\r\n get: function () {\r\n return this._items;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Activate the next selectable item in the menu.\r\n *\r\n * #### Notes\r\n * If no item is selectable, the index will be set to `-1`.\r\n */\r\n Menu.prototype.activateNextItem = function () {\r\n var n = this._items.length;\r\n var ai = this._activeIndex;\r\n var start = ai < n - 1 ? ai + 1 : 0;\r\n var stop = start === 0 ? n - 1 : start - 1;\r\n this.activeIndex = algorithm_1.ArrayExt.findFirstIndex(this._items, Private.canActivate, start, stop);\r\n };\r\n /**\r\n * Activate the previous selectable item in the menu.\r\n *\r\n * #### Notes\r\n * If no item is selectable, the index will be set to `-1`.\r\n */\r\n Menu.prototype.activatePreviousItem = function () {\r\n var n = this._items.length;\r\n var ai = this._activeIndex;\r\n var start = ai <= 0 ? n - 1 : ai - 1;\r\n var stop = start === n - 1 ? 0 : start + 1;\r\n this.activeIndex = algorithm_1.ArrayExt.findLastIndex(this._items, Private.canActivate, start, stop);\r\n };\r\n /**\r\n * Trigger the active menu item.\r\n *\r\n * #### Notes\r\n * If the active item is a submenu, it will be opened and the first\r\n * item will be activated.\r\n *\r\n * If the active item is a command, the command will be executed.\r\n *\r\n * If the menu is not attached, this is a no-op.\r\n *\r\n * If there is no active item, this is a no-op.\r\n */\r\n Menu.prototype.triggerActiveItem = function () {\r\n // Bail if the menu is not attached.\r\n if (!this.isAttached) {\r\n return;\r\n }\r\n // Bail if there is no active item.\r\n var item = this.activeItem;\r\n if (!item) {\r\n return;\r\n }\r\n // Cancel the pending timers.\r\n this._cancelOpenTimer();\r\n this._cancelCloseTimer();\r\n // If the item is a submenu, open it.\r\n if (item.type === 'submenu') {\r\n this._openChildMenu(true);\r\n return;\r\n }\r\n // Close the root menu before executing the command.\r\n this.rootMenu.close();\r\n // Execute the command for the item.\r\n var command = item.command, args = item.args;\r\n if (this.commands.isEnabled(command, args)) {\r\n this.commands.execute(command, args);\r\n }\r\n else {\r\n console.log(\"Command '\" + command + \"' is disabled.\");\r\n }\r\n };\r\n /**\r\n * Add a menu item to the end of the menu.\r\n *\r\n * @param options - The options for creating the menu item.\r\n *\r\n * @returns The menu item added to the menu.\r\n */\r\n Menu.prototype.addItem = function (options) {\r\n return this.insertItem(this._items.length, options);\r\n };\r\n /**\r\n * Insert a menu item into the menu at the specified index.\r\n *\r\n * @param index - The index at which to insert the item.\r\n *\r\n * @param options - The options for creating the menu item.\r\n *\r\n * @returns The menu item added to the menu.\r\n *\r\n * #### Notes\r\n * The index will be clamped to the bounds of the items.\r\n */\r\n Menu.prototype.insertItem = function (index, options) {\r\n // Close the menu if it's attached.\r\n if (this.isAttached) {\r\n this.close();\r\n }\r\n // Reset the active index.\r\n this.activeIndex = -1;\r\n // Clamp the insert index to the array bounds.\r\n var i = Math.max(0, Math.min(index, this._items.length));\r\n // Create the item for the options.\r\n var item = Private.createItem(this, options);\r\n // Insert the item into the array.\r\n algorithm_1.ArrayExt.insert(this._items, i, item);\r\n // Schedule an update of the items.\r\n this.update();\r\n // Return the item added to the menu.\r\n return item;\r\n };\r\n /**\r\n * Remove an item from the menu.\r\n *\r\n * @param item - The item to remove from the menu.\r\n *\r\n * #### Notes\r\n * This is a no-op if the item is not in the menu.\r\n */\r\n Menu.prototype.removeItem = function (item) {\r\n this.removeItemAt(this._items.indexOf(item));\r\n };\r\n /**\r\n * Remove the item at a given index from the menu.\r\n *\r\n * @param index - The index of the item to remove.\r\n *\r\n * #### Notes\r\n * This is a no-op if the index is out of range.\r\n */\r\n Menu.prototype.removeItemAt = function (index) {\r\n // Close the menu if it's attached.\r\n if (this.isAttached) {\r\n this.close();\r\n }\r\n // Reset the active index.\r\n this.activeIndex = -1;\r\n // Remove the item from the array.\r\n var item = algorithm_1.ArrayExt.removeAt(this._items, index);\r\n // Bail if the index is out of range.\r\n if (!item) {\r\n return;\r\n }\r\n // Schedule an update of the items.\r\n this.update();\r\n };\r\n /**\r\n * Remove all menu items from the menu.\r\n */\r\n Menu.prototype.clearItems = function () {\r\n // Close the menu if it's attached.\r\n if (this.isAttached) {\r\n this.close();\r\n }\r\n // Reset the active index.\r\n this.activeIndex = -1;\r\n // Bail if there is nothing to remove.\r\n if (this._items.length === 0) {\r\n return;\r\n }\r\n // Clear the items.\r\n this._items.length = 0;\r\n // Schedule an update of the items.\r\n this.update();\r\n };\r\n /**\r\n * Open the menu at the specified location.\r\n *\r\n * @param x - The client X coordinate of the menu location.\r\n *\r\n * @param y - The client Y coordinate of the menu location.\r\n *\r\n * @param options - The additional options for opening the menu.\r\n *\r\n * #### Notes\r\n * The menu will be opened at the given location unless it will not\r\n * fully fit on the screen. If it will not fit, it will be adjusted\r\n * to fit naturally on the screen.\r\n *\r\n * This is a no-op if the menu is already attached to the DOM.\r\n */\r\n Menu.prototype.open = function (x, y, options) {\r\n if (options === void 0) { options = {}; }\r\n // Bail early if the menu is already attached.\r\n if (this.isAttached) {\r\n return;\r\n }\r\n // Extract the position options.\r\n var forceX = options.forceX || false;\r\n var forceY = options.forceY || false;\r\n // Open the menu as a root menu.\r\n Private.openRootMenu(this, x, y, forceX, forceY);\r\n // Activate the menu to accept keyboard input.\r\n this.activate();\r\n };\r\n /**\r\n * Handle the DOM events for the menu.\r\n *\r\n * @param event - The DOM event sent to the menu.\r\n *\r\n * #### Notes\r\n * This method implements the DOM `EventListener` interface and is\r\n * called in response to events on the menu's DOM nodes. It should\r\n * not be called directly by user code.\r\n */\r\n Menu.prototype.handleEvent = function (event) {\r\n switch (event.type) {\r\n case 'keydown':\r\n this._evtKeyDown(event);\r\n break;\r\n case 'mouseup':\r\n this._evtMouseUp(event);\r\n break;\r\n case 'mousemove':\r\n this._evtMouseMove(event);\r\n break;\r\n case 'mouseenter':\r\n this._evtMouseEnter(event);\r\n break;\r\n case 'mouseleave':\r\n this._evtMouseLeave(event);\r\n break;\r\n case 'mousedown':\r\n this._evtMouseDown(event);\r\n break;\r\n case 'contextmenu':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n Menu.prototype.onBeforeAttach = function (msg) {\r\n this.node.addEventListener('keydown', this);\r\n this.node.addEventListener('mouseup', this);\r\n this.node.addEventListener('mousemove', this);\r\n this.node.addEventListener('mouseenter', this);\r\n this.node.addEventListener('mouseleave', this);\r\n this.node.addEventListener('contextmenu', this);\r\n document.addEventListener('mousedown', this, true);\r\n };\r\n /**\r\n * A message handler invoked on an `'after-detach'` message.\r\n */\r\n Menu.prototype.onAfterDetach = function (msg) {\r\n this.node.removeEventListener('keydown', this);\r\n this.node.removeEventListener('mouseup', this);\r\n this.node.removeEventListener('mousemove', this);\r\n this.node.removeEventListener('mouseenter', this);\r\n this.node.removeEventListener('mouseleave', this);\r\n this.node.removeEventListener('contextmenu', this);\r\n document.removeEventListener('mousedown', this, true);\r\n };\r\n /**\r\n * A message handler invoked on an `'activate-request'` message.\r\n */\r\n Menu.prototype.onActivateRequest = function (msg) {\r\n if (this.isAttached) {\r\n this.node.focus();\r\n }\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n */\r\n Menu.prototype.onUpdateRequest = function (msg) {\r\n var items = this._items;\r\n var renderer = this.renderer;\r\n var activeIndex = this._activeIndex;\r\n var collapsedFlags = Private.computeCollapsed(items);\r\n var content = new Array(items.length);\r\n for (var i = 0, n = items.length; i < n; ++i) {\r\n var item = items[i];\r\n var active = i === activeIndex;\r\n var collapsed = collapsedFlags[i];\r\n content[i] = renderer.renderItem({ item: item, active: active, collapsed: collapsed });\r\n }\r\n virtualdom_1.VirtualDOM.render(content, this.contentNode);\r\n };\r\n /**\r\n * A message handler invoked on a `'close-request'` message.\r\n */\r\n Menu.prototype.onCloseRequest = function (msg) {\r\n // Cancel the pending timers.\r\n this._cancelOpenTimer();\r\n this._cancelCloseTimer();\r\n // Reset the active index.\r\n this.activeIndex = -1;\r\n // Close any open child menu.\r\n var childMenu = this._childMenu;\r\n if (childMenu) {\r\n this._childIndex = -1;\r\n this._childMenu = null;\r\n childMenu._parentMenu = null;\r\n childMenu.close();\r\n }\r\n // Remove this menu from its parent and activate the parent.\r\n var parentMenu = this._parentMenu;\r\n if (parentMenu) {\r\n this._parentMenu = null;\r\n parentMenu._childIndex = -1;\r\n parentMenu._childMenu = null;\r\n parentMenu.activate();\r\n }\r\n // Emit the `aboutToClose` signal if the menu is attached.\r\n if (this.isAttached) {\r\n this._aboutToClose.emit(undefined);\r\n }\r\n // Finish closing the menu.\r\n _super.prototype.onCloseRequest.call(this, msg);\r\n };\r\n /**\r\n * Handle the `'keydown'` event for the menu.\r\n *\r\n * #### Notes\r\n * This listener is attached to the menu node.\r\n */\r\n Menu.prototype._evtKeyDown = function (event) {\r\n // A menu handles all keydown events.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Fetch the key code for the event.\r\n var kc = event.keyCode;\r\n // Enter\r\n if (kc === 13) {\r\n this.triggerActiveItem();\r\n return;\r\n }\r\n // Escape\r\n if (kc === 27) {\r\n this.close();\r\n return;\r\n }\r\n // Left Arrow\r\n if (kc === 37) {\r\n if (this._parentMenu) {\r\n this.close();\r\n }\r\n else {\r\n this._menuRequested.emit('previous');\r\n }\r\n return;\r\n }\r\n // Up Arrow\r\n if (kc === 38) {\r\n this.activatePreviousItem();\r\n return;\r\n }\r\n // Right Arrow\r\n if (kc === 39) {\r\n var item = this.activeItem;\r\n if (item && item.type === 'submenu') {\r\n this.triggerActiveItem();\r\n }\r\n else {\r\n this.rootMenu._menuRequested.emit('next');\r\n }\r\n return;\r\n }\r\n // Down Arrow\r\n if (kc === 40) {\r\n this.activateNextItem();\r\n return;\r\n }\r\n // Get the pressed key character.\r\n var key = keyboard_1.getKeyboardLayout().keyForKeydownEvent(event);\r\n // Bail if the key is not valid.\r\n if (!key) {\r\n return;\r\n }\r\n // Search for the next best matching mnemonic item.\r\n var start = this._activeIndex + 1;\r\n var result = Private.findMnemonic(this._items, key, start);\r\n // Handle the requested mnemonic based on the search results.\r\n // If exactly one mnemonic is matched, that item is triggered.\r\n // Otherwise, the next mnemonic is activated if available,\r\n // followed by the auto mnemonic if available.\r\n if (result.index !== -1 && !result.multiple) {\r\n this.activeIndex = result.index;\r\n this.triggerActiveItem();\r\n }\r\n else if (result.index !== -1) {\r\n this.activeIndex = result.index;\r\n }\r\n else if (result.auto !== -1) {\r\n this.activeIndex = result.auto;\r\n }\r\n };\r\n /**\r\n * Handle the `'mouseup'` event for the menu.\r\n *\r\n * #### Notes\r\n * This listener is attached to the menu node.\r\n */\r\n Menu.prototype._evtMouseUp = function (event) {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.triggerActiveItem();\r\n };\r\n /**\r\n * Handle the `'mousemove'` event for the menu.\r\n *\r\n * #### Notes\r\n * This listener is attached to the menu node.\r\n */\r\n Menu.prototype._evtMouseMove = function (event) {\r\n // Hit test the item nodes for the item under the mouse.\r\n var index = algorithm_1.ArrayExt.findFirstIndex(this.contentNode.children, function (node) {\r\n return domutils_1.ElementExt.hitTest(node, event.clientX, event.clientY);\r\n });\r\n // Bail early if the mouse is already over the active index.\r\n if (index === this._activeIndex) {\r\n return;\r\n }\r\n // Update and coerce the active index.\r\n this.activeIndex = index;\r\n index = this.activeIndex;\r\n // If the index is the current child index, cancel the timers.\r\n if (index === this._childIndex) {\r\n this._cancelOpenTimer();\r\n this._cancelCloseTimer();\r\n return;\r\n }\r\n // If a child menu is currently open, start the close timer.\r\n if (this._childIndex !== -1) {\r\n this._startCloseTimer();\r\n }\r\n // Cancel the open timer to give a full delay for opening.\r\n this._cancelOpenTimer();\r\n // Bail if the active item is not a valid submenu item.\r\n var item = this.activeItem;\r\n if (!item || item.type !== 'submenu' || !item.submenu) {\r\n return;\r\n }\r\n // Start the open timer to open the active item submenu.\r\n this._startOpenTimer();\r\n };\r\n /**\r\n * Handle the `'mouseenter'` event for the menu.\r\n *\r\n * #### Notes\r\n * This listener is attached to the menu node.\r\n */\r\n Menu.prototype._evtMouseEnter = function (event) {\r\n // Synchronize the active ancestor items.\r\n for (var menu = this._parentMenu; menu; menu = menu._parentMenu) {\r\n menu._cancelOpenTimer();\r\n menu._cancelCloseTimer();\r\n menu.activeIndex = menu._childIndex;\r\n }\r\n };\r\n /**\r\n * Handle the `'mouseleave'` event for the menu.\r\n *\r\n * #### Notes\r\n * This listener is attached to the menu node.\r\n */\r\n Menu.prototype._evtMouseLeave = function (event) {\r\n // Cancel any pending submenu opening.\r\n this._cancelOpenTimer();\r\n // If there is no open child menu, just reset the active index.\r\n if (!this._childMenu) {\r\n this.activeIndex = -1;\r\n return;\r\n }\r\n // If the mouse is over the child menu, cancel the close timer.\r\n var clientX = event.clientX, clientY = event.clientY;\r\n if (domutils_1.ElementExt.hitTest(this._childMenu.node, clientX, clientY)) {\r\n this._cancelCloseTimer();\r\n return;\r\n }\r\n // Otherwise, reset the active index and start the close timer.\r\n this.activeIndex = -1;\r\n this._startCloseTimer();\r\n };\r\n /**\r\n * Handle the `'mousedown'` event for the menu.\r\n *\r\n * #### Notes\r\n * This listener is attached to the document node.\r\n */\r\n Menu.prototype._evtMouseDown = function (event) {\r\n // Bail if the menu is not a root menu.\r\n if (this._parentMenu) {\r\n return;\r\n }\r\n // The mouse button which is pressed is irrelevant. If the press\r\n // is not on a menu, the entire hierarchy is closed and the event\r\n // is allowed to propagate. This allows other code to act on the\r\n // event, such as focusing the clicked element.\r\n if (Private.hitTestMenus(this, event.clientX, event.clientY)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n else {\r\n this.close();\r\n }\r\n };\r\n /**\r\n * Open the child menu at the active index immediately.\r\n *\r\n * If a different child menu is already open, it will be closed,\r\n * even if the active item is not a valid submenu.\r\n */\r\n Menu.prototype._openChildMenu = function (activateFirst) {\r\n if (activateFirst === void 0) { activateFirst = false; }\r\n // If the item is not a valid submenu, close the child menu.\r\n var item = this.activeItem;\r\n if (!item || item.type !== 'submenu' || !item.submenu) {\r\n this._closeChildMenu();\r\n return;\r\n }\r\n // Do nothing if the child menu will not change.\r\n var submenu = item.submenu;\r\n if (submenu === this._childMenu) {\r\n return;\r\n }\r\n // Ensure the current child menu is closed.\r\n this._closeChildMenu();\r\n // Update the private child state.\r\n this._childMenu = submenu;\r\n this._childIndex = this._activeIndex;\r\n // Set the parent menu reference for the child.\r\n submenu._parentMenu = this;\r\n // Ensure the menu is updated and lookup the item node.\r\n messaging_1.MessageLoop.sendMessage(this, widget_1.Widget.Msg.UpdateRequest);\r\n var itemNode = this.contentNode.children[this._activeIndex];\r\n // Open the submenu at the active node.\r\n Private.openSubmenu(submenu, itemNode);\r\n // Activate the first item if desired.\r\n if (activateFirst) {\r\n submenu.activeIndex = -1;\r\n submenu.activateNextItem();\r\n }\r\n // Activate the child menu.\r\n submenu.activate();\r\n };\r\n /**\r\n * Close the child menu immediately.\r\n *\r\n * This is a no-op if a child menu is not open.\r\n */\r\n Menu.prototype._closeChildMenu = function () {\r\n if (this._childMenu) {\r\n this._childMenu.close();\r\n }\r\n };\r\n /**\r\n * Start the open timer, unless it is already pending.\r\n */\r\n Menu.prototype._startOpenTimer = function () {\r\n var _this = this;\r\n if (this._openTimerID === 0) {\r\n this._openTimerID = window.setTimeout(function () {\r\n _this._openTimerID = 0;\r\n _this._openChildMenu();\r\n }, Private.TIMER_DELAY);\r\n }\r\n };\r\n /**\r\n * Start the close timer, unless it is already pending.\r\n */\r\n Menu.prototype._startCloseTimer = function () {\r\n var _this = this;\r\n if (this._closeTimerID === 0) {\r\n this._closeTimerID = window.setTimeout(function () {\r\n _this._closeTimerID = 0;\r\n _this._closeChildMenu();\r\n }, Private.TIMER_DELAY);\r\n }\r\n };\r\n /**\r\n * Cancel the open timer, if the timer is pending.\r\n */\r\n Menu.prototype._cancelOpenTimer = function () {\r\n if (this._openTimerID !== 0) {\r\n clearTimeout(this._openTimerID);\r\n this._openTimerID = 0;\r\n }\r\n };\r\n /**\r\n * Cancel the close timer, if the timer is pending.\r\n */\r\n Menu.prototype._cancelCloseTimer = function () {\r\n if (this._closeTimerID !== 0) {\r\n clearTimeout(this._closeTimerID);\r\n this._closeTimerID = 0;\r\n }\r\n };\r\n return Menu;\r\n}(widget_1.Widget));\r\nexports.Menu = Menu;\r\n/**\r\n * The namespace for the `Menu` class statics.\r\n */\r\n(function (Menu) {\r\n /**\r\n * The default implementation of `IRenderer`.\r\n *\r\n * #### Notes\r\n * Subclasses are free to reimplement rendering methods as needed.\r\n */\r\n var Renderer = /** @class */ (function () {\r\n /**\r\n * Construct a new renderer.\r\n */\r\n function Renderer() {\r\n }\r\n /**\r\n * Render the virtual element for a menu item.\r\n *\r\n * @param data - The data to use for rendering the item.\r\n *\r\n * @returns A virtual element representing the item.\r\n */\r\n Renderer.prototype.renderItem = function (data) {\r\n var className = this.createItemClass(data);\r\n var dataset = this.createItemDataset(data);\r\n return (virtualdom_1.h.li({ className: className, dataset: dataset }, this.renderIcon(data), this.renderLabel(data), this.renderShortcut(data), this.renderSubmenu(data)));\r\n };\r\n /**\r\n * Render the icon element for a menu item.\r\n *\r\n * @param data - The data to use for rendering the icon.\r\n *\r\n * @returns A virtual element representing the item icon.\r\n */\r\n Renderer.prototype.renderIcon = function (data) {\r\n var className = this.createIconClass(data);\r\n return virtualdom_1.h.div({ className: className }, data.item.iconLabel);\r\n };\r\n /**\r\n * Render the label element for a menu item.\r\n *\r\n * @param data - The data to use for rendering the label.\r\n *\r\n * @returns A virtual element representing the item label.\r\n */\r\n Renderer.prototype.renderLabel = function (data) {\r\n var content = this.formatLabel(data);\r\n return virtualdom_1.h.div({ className: 'p-Menu-itemLabel' }, content);\r\n };\r\n /**\r\n * Render the shortcut element for a menu item.\r\n *\r\n * @param data - The data to use for rendering the shortcut.\r\n *\r\n * @returns A virtual element representing the item shortcut.\r\n */\r\n Renderer.prototype.renderShortcut = function (data) {\r\n var content = this.formatShortcut(data);\r\n return virtualdom_1.h.div({ className: 'p-Menu-itemShortcut' }, content);\r\n };\r\n /**\r\n * Render the submenu icon element for a menu item.\r\n *\r\n * @param data - The data to use for rendering the submenu icon.\r\n *\r\n * @returns A virtual element representing the submenu icon.\r\n */\r\n Renderer.prototype.renderSubmenu = function (data) {\r\n return virtualdom_1.h.div({ className: 'p-Menu-itemSubmenuIcon' });\r\n };\r\n /**\r\n * Create the class name for the menu item.\r\n *\r\n * @param data - The data to use for the class name.\r\n *\r\n * @returns The full class name for the menu item.\r\n */\r\n Renderer.prototype.createItemClass = function (data) {\r\n // Setup the initial class name.\r\n var name = 'p-Menu-item';\r\n // Add the boolean state classes.\r\n if (!data.item.isEnabled) {\r\n name += ' p-mod-disabled';\r\n }\r\n if (data.item.isToggled) {\r\n name += ' p-mod-toggled';\r\n }\r\n if (!data.item.isVisible) {\r\n name += ' p-mod-hidden';\r\n }\r\n if (data.active) {\r\n name += ' p-mod-active';\r\n }\r\n if (data.collapsed) {\r\n name += ' p-mod-collapsed';\r\n }\r\n // Add the extra class.\r\n var extra = data.item.className;\r\n if (extra) {\r\n name += \" \" + extra;\r\n }\r\n // Return the complete class name.\r\n return name;\r\n };\r\n /**\r\n * Create the dataset for the menu item.\r\n *\r\n * @param data - The data to use for creating the dataset.\r\n *\r\n * @returns The dataset for the menu item.\r\n */\r\n Renderer.prototype.createItemDataset = function (data) {\r\n var result;\r\n var _a = data.item, type = _a.type, command = _a.command, dataset = _a.dataset;\r\n if (type === 'command') {\r\n result = __assign({}, dataset, { type: type, command: command });\r\n }\r\n else {\r\n result = __assign({}, dataset, { type: type });\r\n }\r\n return result;\r\n };\r\n /**\r\n * Create the class name for the menu item icon.\r\n *\r\n * @param data - The data to use for the class name.\r\n *\r\n * @returns The full class name for the item icon.\r\n */\r\n Renderer.prototype.createIconClass = function (data) {\r\n var name = 'p-Menu-itemIcon';\r\n var extra = data.item.iconClass;\r\n return extra ? name + \" \" + extra : name;\r\n };\r\n /**\r\n * Create the render content for the label node.\r\n *\r\n * @param data - The data to use for the label content.\r\n *\r\n * @returns The content to add to the label node.\r\n */\r\n Renderer.prototype.formatLabel = function (data) {\r\n // Fetch the label text and mnemonic index.\r\n var _a = data.item, label = _a.label, mnemonic = _a.mnemonic;\r\n // If the index is out of range, do not modify the label.\r\n if (mnemonic < 0 || mnemonic >= label.length) {\r\n return label;\r\n }\r\n // Split the label into parts.\r\n var prefix = label.slice(0, mnemonic);\r\n var suffix = label.slice(mnemonic + 1);\r\n var char = label[mnemonic];\r\n // Wrap the mnemonic character in a span.\r\n var span = virtualdom_1.h.span({ className: 'p-Menu-itemMnemonic' }, char);\r\n // Return the content parts.\r\n return [prefix, span, suffix];\r\n };\r\n /**\r\n * Create the render content for the shortcut node.\r\n *\r\n * @param data - The data to use for the shortcut content.\r\n *\r\n * @returns The content to add to the shortcut node.\r\n */\r\n Renderer.prototype.formatShortcut = function (data) {\r\n var kb = data.item.keyBinding;\r\n return kb ? kb.keys.map(commands_1.CommandRegistry.formatKeystroke).join(', ') : null;\r\n };\r\n return Renderer;\r\n }());\r\n Menu.Renderer = Renderer;\r\n /**\r\n * The default `Renderer` instance.\r\n */\r\n Menu.defaultRenderer = new Renderer();\r\n})(Menu = exports.Menu || (exports.Menu = {}));\r\nexports.Menu = Menu;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * The ms delay for opening and closing a submenu.\r\n */\r\n Private.TIMER_DELAY = 300;\r\n /**\r\n * The horizontal pixel overlap for an open submenu.\r\n */\r\n Private.SUBMENU_OVERLAP = 3;\r\n /**\r\n * Create the DOM node for a menu.\r\n */\r\n function createNode() {\r\n var node = document.createElement('div');\r\n var content = document.createElement('ul');\r\n content.className = 'p-Menu-content';\r\n node.appendChild(content);\r\n node.tabIndex = -1;\r\n return node;\r\n }\r\n Private.createNode = createNode;\r\n /**\r\n * Test whether a menu item can be activated.\r\n */\r\n function canActivate(item) {\r\n return item.type !== 'separator' && item.isEnabled && item.isVisible;\r\n }\r\n Private.canActivate = canActivate;\r\n /**\r\n * Create a new menu item for an owner menu.\r\n */\r\n function createItem(owner, options) {\r\n return new MenuItem(owner.commands, options);\r\n }\r\n Private.createItem = createItem;\r\n /**\r\n * Hit test a menu hierarchy starting at the given root.\r\n */\r\n function hitTestMenus(menu, x, y) {\r\n for (var temp = menu; temp; temp = temp.childMenu) {\r\n if (domutils_1.ElementExt.hitTest(temp.node, x, y)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n Private.hitTestMenus = hitTestMenus;\r\n /**\r\n * Compute which extra separator items should be collapsed.\r\n */\r\n function computeCollapsed(items) {\r\n // Allocate the return array and fill it with `false`.\r\n var result = new Array(items.length);\r\n algorithm_1.ArrayExt.fill(result, false);\r\n // Collapse the leading separators.\r\n var k1 = 0;\r\n var n = items.length;\r\n for (; k1 < n; ++k1) {\r\n var item = items[k1];\r\n if (!item.isVisible) {\r\n continue;\r\n }\r\n if (item.type !== 'separator') {\r\n break;\r\n }\r\n result[k1] = true;\r\n }\r\n // Hide the trailing separators.\r\n var k2 = n - 1;\r\n for (; k2 >= 0; --k2) {\r\n var item = items[k2];\r\n if (!item.isVisible) {\r\n continue;\r\n }\r\n if (item.type !== 'separator') {\r\n break;\r\n }\r\n result[k2] = true;\r\n }\r\n // Hide the remaining consecutive separators.\r\n var hide = false;\r\n while (++k1 < k2) {\r\n var item = items[k1];\r\n if (!item.isVisible) {\r\n continue;\r\n }\r\n if (item.type !== 'separator') {\r\n hide = false;\r\n }\r\n else if (hide) {\r\n result[k1] = true;\r\n }\r\n else {\r\n hide = true;\r\n }\r\n }\r\n // Return the resulting flags.\r\n return result;\r\n }\r\n Private.computeCollapsed = computeCollapsed;\r\n /**\r\n * Open a menu as a root menu at the target location.\r\n */\r\n function openRootMenu(menu, x, y, forceX, forceY) {\r\n // Ensure the menu is updated before attaching and measuring.\r\n messaging_1.MessageLoop.sendMessage(menu, widget_1.Widget.Msg.UpdateRequest);\r\n // Get the current position and size of the main viewport.\r\n var px = window.pageXOffset;\r\n var py = window.pageYOffset;\r\n var cw = document.documentElement.clientWidth;\r\n var ch = document.documentElement.clientHeight;\r\n // Compute the maximum allowed height for the menu.\r\n var maxHeight = ch - (forceY ? y : 0);\r\n // Fetch common variables.\r\n var node = menu.node;\r\n var style = node.style;\r\n // Clear the menu geometry and prepare it for measuring.\r\n style.top = '';\r\n style.left = '';\r\n style.width = '';\r\n style.height = '';\r\n style.visibility = 'hidden';\r\n style.maxHeight = maxHeight + \"px\";\r\n // Attach the menu to the document.\r\n widget_1.Widget.attach(menu, document.body);\r\n // Measure the size of the menu.\r\n var _a = node.getBoundingClientRect(), width = _a.width, height = _a.height;\r\n // Adjust the X position of the menu to fit on-screen.\r\n if (!forceX && (x + width > px + cw)) {\r\n x = px + cw - width;\r\n }\r\n // Adjust the Y position of the menu to fit on-screen.\r\n if (!forceY && (y + height > py + ch)) {\r\n if (y > py + ch) {\r\n y = py + ch - height;\r\n }\r\n else {\r\n y = y - height;\r\n }\r\n }\r\n // Update the position of the menu to the computed position.\r\n style.top = Math.max(0, y) + \"px\";\r\n style.left = Math.max(0, x) + \"px\";\r\n // Finally, make the menu visible on the screen.\r\n style.visibility = '';\r\n }\r\n Private.openRootMenu = openRootMenu;\r\n /**\r\n * Open a menu as a submenu using an item node for positioning.\r\n */\r\n function openSubmenu(submenu, itemNode) {\r\n // Ensure the menu is updated before opening.\r\n messaging_1.MessageLoop.sendMessage(submenu, widget_1.Widget.Msg.UpdateRequest);\r\n // Get the current position and size of the main viewport.\r\n var px = window.pageXOffset;\r\n var py = window.pageYOffset;\r\n var cw = document.documentElement.clientWidth;\r\n var ch = document.documentElement.clientHeight;\r\n // Compute the maximum allowed height for the menu.\r\n var maxHeight = ch;\r\n // Fetch common variables.\r\n var node = submenu.node;\r\n var style = node.style;\r\n // Clear the menu geometry and prepare it for measuring.\r\n style.top = '';\r\n style.left = '';\r\n style.width = '';\r\n style.height = '';\r\n style.visibility = 'hidden';\r\n style.maxHeight = maxHeight + \"px\";\r\n // Attach the menu to the document.\r\n widget_1.Widget.attach(submenu, document.body);\r\n // Measure the size of the menu.\r\n var _a = node.getBoundingClientRect(), width = _a.width, height = _a.height;\r\n // Compute the box sizing for the menu.\r\n var box = domutils_1.ElementExt.boxSizing(submenu.node);\r\n // Get the bounding rect for the target item node.\r\n var itemRect = itemNode.getBoundingClientRect();\r\n // Compute the target X position.\r\n var x = itemRect.right - Private.SUBMENU_OVERLAP;\r\n // Adjust the X position to fit on the screen.\r\n if (x + width > px + cw) {\r\n x = itemRect.left + Private.SUBMENU_OVERLAP - width;\r\n }\r\n // Compute the target Y position.\r\n var y = itemRect.top - box.borderTop - box.paddingTop;\r\n // Adjust the Y position to fit on the screen.\r\n if (y + height > py + ch) {\r\n y = itemRect.bottom + box.borderBottom + box.paddingBottom - height;\r\n }\r\n // Update the position of the menu to the computed position.\r\n style.top = Math.max(0, y) + \"px\";\r\n style.left = Math.max(0, x) + \"px\";\r\n // Finally, make the menu visible on the screen.\r\n style.visibility = '';\r\n }\r\n Private.openSubmenu = openSubmenu;\r\n /**\r\n * Find the best matching mnemonic item.\r\n *\r\n * The search starts at the given index and wraps around.\r\n */\r\n function findMnemonic(items, key, start) {\r\n // Setup the result variables.\r\n var index = -1;\r\n var auto = -1;\r\n var multiple = false;\r\n // Normalize the key to upper case.\r\n var upperKey = key.toUpperCase();\r\n // Search the items from the given start index.\r\n for (var i = 0, n = items.length; i < n; ++i) {\r\n // Compute the wrapped index.\r\n var k = (i + start) % n;\r\n // Lookup the item\r\n var item = items[k];\r\n // Ignore items which cannot be activated.\r\n if (!canActivate(item)) {\r\n continue;\r\n }\r\n // Ignore items with an empty label.\r\n var label = item.label;\r\n if (label.length === 0) {\r\n continue;\r\n }\r\n // Lookup the mnemonic index for the label.\r\n var mn = item.mnemonic;\r\n // Handle a valid mnemonic index.\r\n if (mn >= 0 && mn < label.length) {\r\n if (label[mn].toUpperCase() === upperKey) {\r\n if (index === -1) {\r\n index = k;\r\n }\r\n else {\r\n multiple = true;\r\n }\r\n }\r\n continue;\r\n }\r\n // Finally, handle the auto index if possible.\r\n if (auto === -1 && label[0].toUpperCase() === upperKey) {\r\n auto = k;\r\n }\r\n }\r\n // Return the search results.\r\n return { index: index, multiple: multiple, auto: auto };\r\n }\r\n Private.findMnemonic = findMnemonic;\r\n /**\r\n * A concrete implementation of `Menu.IItem`.\r\n */\r\n var MenuItem = /** @class */ (function () {\r\n /**\r\n * Construct a new menu item.\r\n */\r\n function MenuItem(commands, options) {\r\n this._commands = commands;\r\n this.type = options.type || 'command';\r\n this.command = options.command || '';\r\n this.args = options.args || coreutils_1.JSONExt.emptyObject;\r\n this.submenu = options.submenu || null;\r\n }\r\n Object.defineProperty(MenuItem.prototype, \"label\", {\r\n /**\r\n * The display label for the menu item.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.label(this.command, this.args);\r\n }\r\n if (this.type === 'submenu' && this.submenu) {\r\n return this.submenu.title.label;\r\n }\r\n return '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"mnemonic\", {\r\n /**\r\n * The mnemonic index for the menu item.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.mnemonic(this.command, this.args);\r\n }\r\n if (this.type === 'submenu' && this.submenu) {\r\n return this.submenu.title.mnemonic;\r\n }\r\n return -1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"icon\", {\r\n /**\r\n * @deprecated Use `iconClass` instead.\r\n */\r\n get: function () {\r\n return this.iconClass;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"iconClass\", {\r\n /**\r\n * The icon class for the menu item.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.iconClass(this.command, this.args);\r\n }\r\n if (this.type === 'submenu' && this.submenu) {\r\n return this.submenu.title.iconClass;\r\n }\r\n return '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"iconLabel\", {\r\n /**\r\n * The icon label for the menu item.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.iconLabel(this.command, this.args);\r\n }\r\n if (this.type === 'submenu' && this.submenu) {\r\n return this.submenu.title.iconLabel;\r\n }\r\n return '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"caption\", {\r\n /**\r\n * The display caption for the menu item.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.caption(this.command, this.args);\r\n }\r\n if (this.type === 'submenu' && this.submenu) {\r\n return this.submenu.title.caption;\r\n }\r\n return '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"className\", {\r\n /**\r\n * The extra class name for the menu item.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.className(this.command, this.args);\r\n }\r\n if (this.type === 'submenu' && this.submenu) {\r\n return this.submenu.title.className;\r\n }\r\n return '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"dataset\", {\r\n /**\r\n * The dataset for the menu item.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.dataset(this.command, this.args);\r\n }\r\n if (this.type === 'submenu' && this.submenu) {\r\n return this.submenu.title.dataset;\r\n }\r\n return {};\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"isEnabled\", {\r\n /**\r\n * Whether the menu item is enabled.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.isEnabled(this.command, this.args);\r\n }\r\n if (this.type === 'submenu') {\r\n return this.submenu !== null;\r\n }\r\n return true;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"isToggled\", {\r\n /**\r\n * Whether the menu item is toggled.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.isToggled(this.command, this.args);\r\n }\r\n return false;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"isVisible\", {\r\n /**\r\n * Whether the menu item is visible.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n return this._commands.isVisible(this.command, this.args);\r\n }\r\n if (this.type === 'submenu') {\r\n return this.submenu !== null;\r\n }\r\n return true;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuItem.prototype, \"keyBinding\", {\r\n /**\r\n * The key binding for the menu item.\r\n */\r\n get: function () {\r\n if (this.type === 'command') {\r\n var _a = this, command_1 = _a.command, args_1 = _a.args;\r\n return algorithm_1.ArrayExt.findLastValue(this._commands.keyBindings, function (kb) {\r\n return kb.command === command_1 && coreutils_1.JSONExt.deepEqual(kb.args, args_1);\r\n }) || null;\r\n }\r\n return null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MenuItem;\r\n }());\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar boxengine_1 = require(\"./boxengine\");\r\nvar layout_1 = require(\"./layout\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A layout which provides a flexible docking arrangement.\r\n *\r\n * #### Notes\r\n * The consumer of this layout is responsible for handling all signals\r\n * from the generated tab bars and managing the visibility of widgets\r\n * and tab bars as needed.\r\n */\r\nvar DockLayout = /** @class */ (function (_super) {\r\n __extends(DockLayout, _super);\r\n /**\r\n * Construct a new dock layout.\r\n *\r\n * @param options - The options for initializing the layout.\r\n */\r\n function DockLayout(options) {\r\n var _this = _super.call(this) || this;\r\n _this._spacing = 4;\r\n _this._dirty = false;\r\n _this._root = null;\r\n _this._box = null;\r\n _this._items = new Map();\r\n _this.renderer = options.renderer;\r\n if (options.spacing !== undefined) {\r\n _this._spacing = Private.clampSpacing(options.spacing);\r\n }\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the layout.\r\n *\r\n * #### Notes\r\n * This will clear and dispose all widgets in the layout.\r\n */\r\n DockLayout.prototype.dispose = function () {\r\n // Get an iterator over the widgets in the layout.\r\n var widgets = this.iter();\r\n // Dispose of the layout items.\r\n this._items.forEach(function (item) { item.dispose(); });\r\n // Clear the layout state before disposing the widgets.\r\n this._box = null;\r\n this._root = null;\r\n this._items.clear();\r\n // Dispose of the widgets contained in the old layout root.\r\n algorithm_1.each(widgets, function (widget) { widget.dispose(); });\r\n // Dispose of the base class.\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(DockLayout.prototype, \"spacing\", {\r\n /**\r\n * Get the inter-element spacing for the dock layout.\r\n */\r\n get: function () {\r\n return this._spacing;\r\n },\r\n /**\r\n * Set the inter-element spacing for the dock layout.\r\n */\r\n set: function (value) {\r\n value = Private.clampSpacing(value);\r\n if (this._spacing === value) {\r\n return;\r\n }\r\n this._spacing = value;\r\n if (!this.parent) {\r\n return;\r\n }\r\n this.parent.fit();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DockLayout.prototype, \"isEmpty\", {\r\n /**\r\n * Whether the dock layout is empty.\r\n */\r\n get: function () {\r\n return this._root === null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Create an iterator over all widgets in the layout.\r\n *\r\n * @returns A new iterator over the widgets in the layout.\r\n *\r\n * #### Notes\r\n * This iterator includes the generated tab bars.\r\n */\r\n DockLayout.prototype.iter = function () {\r\n return this._root ? this._root.iterAllWidgets() : algorithm_1.empty();\r\n };\r\n /**\r\n * Create an iterator over the user widgets in the layout.\r\n *\r\n * @returns A new iterator over the user widgets in the layout.\r\n *\r\n * #### Notes\r\n * This iterator does not include the generated tab bars.\r\n */\r\n DockLayout.prototype.widgets = function () {\r\n return this._root ? this._root.iterUserWidgets() : algorithm_1.empty();\r\n };\r\n /**\r\n * Create an iterator over the selected widgets in the layout.\r\n *\r\n * @returns A new iterator over the selected user widgets.\r\n *\r\n * #### Notes\r\n * This iterator yields the widgets corresponding to the current tab\r\n * of each tab bar in the layout.\r\n */\r\n DockLayout.prototype.selectedWidgets = function () {\r\n return this._root ? this._root.iterSelectedWidgets() : algorithm_1.empty();\r\n };\r\n /**\r\n * Create an iterator over the tab bars in the layout.\r\n *\r\n * @returns A new iterator over the tab bars in the layout.\r\n *\r\n * #### Notes\r\n * This iterator does not include the user widgets.\r\n */\r\n DockLayout.prototype.tabBars = function () {\r\n return this._root ? this._root.iterTabBars() : algorithm_1.empty();\r\n };\r\n /**\r\n * Create an iterator over the handles in the layout.\r\n *\r\n * @returns A new iterator over the handles in the layout.\r\n */\r\n DockLayout.prototype.handles = function () {\r\n return this._root ? this._root.iterHandles() : algorithm_1.empty();\r\n };\r\n /**\r\n * Move a handle to the given offset position.\r\n *\r\n * @param handle - The handle to move.\r\n *\r\n * @param offsetX - The desired offset X position of the handle.\r\n *\r\n * @param offsetY - The desired offset Y position of the handle.\r\n *\r\n * #### Notes\r\n * If the given handle is not contained in the layout, this is no-op.\r\n *\r\n * The handle will be moved as close as possible to the desired\r\n * position without violating any of the layout constraints.\r\n *\r\n * Only one of the coordinates is used depending on the orientation\r\n * of the handle. This method accepts both coordinates to make it\r\n * easy to invoke from a mouse move event without needing to know\r\n * the handle orientation.\r\n */\r\n DockLayout.prototype.moveHandle = function (handle, offsetX, offsetY) {\r\n // Bail early if there is no root or if the handle is hidden.\r\n if (!this._root || handle.classList.contains('p-mod-hidden')) {\r\n return;\r\n }\r\n // Lookup the split node for the handle.\r\n var data = this._root.findSplitNode(handle);\r\n if (!data) {\r\n return;\r\n }\r\n // Compute the desired delta movement for the handle.\r\n var delta;\r\n if (data.node.orientation === 'horizontal') {\r\n delta = offsetX - handle.offsetLeft;\r\n }\r\n else {\r\n delta = offsetY - handle.offsetTop;\r\n }\r\n // Bail if there is no handle movement.\r\n if (delta === 0) {\r\n return;\r\n }\r\n // Prevent sibling resizing unless needed.\r\n data.node.holdSizes();\r\n // Adjust the sizers to reflect the handle movement.\r\n boxengine_1.BoxEngine.adjust(data.node.sizers, data.index, delta);\r\n // Update the layout of the widgets.\r\n if (this.parent) {\r\n this.parent.update();\r\n }\r\n };\r\n /**\r\n * Save the current configuration of the dock layout.\r\n *\r\n * @returns A new config object for the current layout state.\r\n *\r\n * #### Notes\r\n * The return value can be provided to the `restoreLayout` method\r\n * in order to restore the layout to its current configuration.\r\n */\r\n DockLayout.prototype.saveLayout = function () {\r\n // Bail early if there is no root.\r\n if (!this._root) {\r\n return { main: null };\r\n }\r\n // Hold the current sizes in the layout tree.\r\n this._root.holdAllSizes();\r\n // Return the layout config.\r\n return { main: this._root.createConfig() };\r\n };\r\n /**\r\n * Restore the layout to a previously saved configuration.\r\n *\r\n * @param config - The layout configuration to restore.\r\n *\r\n * #### Notes\r\n * Widgets which currently belong to the layout but which are not\r\n * contained in the config will be unparented.\r\n */\r\n DockLayout.prototype.restoreLayout = function (config) {\r\n var _this = this;\r\n // Create the widget set for validating the config.\r\n var widgetSet = new Set();\r\n // Normalize the main area config and collect the widgets.\r\n var mainConfig;\r\n if (config.main) {\r\n mainConfig = Private.normalizeAreaConfig(config.main, widgetSet);\r\n }\r\n else {\r\n mainConfig = null;\r\n }\r\n // Create iterators over the old content.\r\n var oldWidgets = this.widgets();\r\n var oldTabBars = this.tabBars();\r\n var oldHandles = this.handles();\r\n // Clear the root before removing the old content.\r\n this._root = null;\r\n // Unparent the old widgets which are not in the new config.\r\n algorithm_1.each(oldWidgets, function (widget) {\r\n if (!widgetSet.has(widget)) {\r\n widget.parent = null;\r\n }\r\n });\r\n // Dispose of the old tab bars.\r\n algorithm_1.each(oldTabBars, function (tabBar) {\r\n tabBar.dispose();\r\n });\r\n // Remove the old handles.\r\n algorithm_1.each(oldHandles, function (handle) {\r\n if (handle.parentNode) {\r\n handle.parentNode.removeChild(handle);\r\n }\r\n });\r\n // Reparent the new widgets to the current parent.\r\n widgetSet.forEach(function (widget) {\r\n widget.parent = _this.parent;\r\n });\r\n // Create the root node for the new config.\r\n if (mainConfig) {\r\n this._root = Private.realizeAreaConfig(mainConfig, {\r\n createTabBar: function () { return _this._createTabBar(); },\r\n createHandle: function () { return _this._createHandle(); }\r\n });\r\n }\r\n else {\r\n this._root = null;\r\n }\r\n // If there is no parent, there is nothing more to do.\r\n if (!this.parent) {\r\n return;\r\n }\r\n // Attach the new widgets to the parent.\r\n widgetSet.forEach(function (widget) {\r\n _this.attachWidget(widget);\r\n });\r\n // Post a fit request to the parent.\r\n this.parent.fit();\r\n };\r\n /**\r\n * Add a widget to the dock layout.\r\n *\r\n * @param widget - The widget to add to the dock layout.\r\n *\r\n * @param options - The additional options for adding the widget.\r\n *\r\n * #### Notes\r\n * The widget will be moved if it is already contained in the layout.\r\n *\r\n * An error will be thrown if the reference widget is invalid.\r\n */\r\n DockLayout.prototype.addWidget = function (widget, options) {\r\n if (options === void 0) { options = {}; }\r\n // Parse the options.\r\n var ref = options.ref || null;\r\n var mode = options.mode || 'tab-after';\r\n // Find the tab node which holds the reference widget.\r\n var refNode = null;\r\n if (this._root && ref) {\r\n refNode = this._root.findTabNode(ref);\r\n }\r\n // Throw an error if the reference widget is invalid.\r\n if (ref && !refNode) {\r\n throw new Error('Reference widget is not in the layout.');\r\n }\r\n // Reparent the widget to the current layout parent.\r\n widget.parent = this.parent;\r\n // Insert the widget according to the insert mode.\r\n switch (mode) {\r\n case 'tab-after':\r\n this._insertTab(widget, ref, refNode, true);\r\n break;\r\n case 'tab-before':\r\n this._insertTab(widget, ref, refNode, false);\r\n break;\r\n case 'split-top':\r\n this._insertSplit(widget, ref, refNode, 'vertical', false);\r\n break;\r\n case 'split-left':\r\n this._insertSplit(widget, ref, refNode, 'horizontal', false);\r\n break;\r\n case 'split-right':\r\n this._insertSplit(widget, ref, refNode, 'horizontal', true);\r\n break;\r\n case 'split-bottom':\r\n this._insertSplit(widget, ref, refNode, 'vertical', true);\r\n break;\r\n }\r\n // Do nothing else if there is no parent widget.\r\n if (!this.parent) {\r\n return;\r\n }\r\n // Ensure the widget is attached to the parent widget.\r\n this.attachWidget(widget);\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * Remove a widget from the layout.\r\n *\r\n * @param widget - The widget to remove from the layout.\r\n *\r\n * #### Notes\r\n * A widget is automatically removed from the layout when its `parent`\r\n * is set to `null`. This method should only be invoked directly when\r\n * removing a widget from a layout which has yet to be installed on a\r\n * parent widget.\r\n *\r\n * This method does *not* modify the widget's `parent`.\r\n */\r\n DockLayout.prototype.removeWidget = function (widget) {\r\n // Remove the widget from its current layout location.\r\n this._removeWidget(widget);\r\n // Do nothing else if there is no parent widget.\r\n if (!this.parent) {\r\n return;\r\n }\r\n // Detach the widget from the parent widget.\r\n this.detachWidget(widget);\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * Find the tab area which contains the given client position.\r\n *\r\n * @param clientX - The client X position of interest.\r\n *\r\n * @param clientY - The client Y position of interest.\r\n *\r\n * @returns The geometry of the tab area at the given position, or\r\n * `null` if there is no tab area at the given position.\r\n */\r\n DockLayout.prototype.hitTestTabAreas = function (clientX, clientY) {\r\n // Bail early if hit testing cannot produce valid results.\r\n if (!this._root || !this.parent || !this.parent.isVisible) {\r\n return null;\r\n }\r\n // Ensure the parent box sizing data is computed.\r\n if (!this._box) {\r\n this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n }\r\n // Convert from client to local coordinates.\r\n var rect = this.parent.node.getBoundingClientRect();\r\n var x = clientX - rect.left - this._box.borderLeft;\r\n var y = clientY - rect.top - this._box.borderTop;\r\n // Find the tab layout node at the local position.\r\n var tabNode = this._root.hitTestTabNodes(x, y);\r\n // Bail if a tab layout node was not found.\r\n if (!tabNode) {\r\n return null;\r\n }\r\n // Extract the data from the tab node.\r\n var tabBar = tabNode.tabBar, top = tabNode.top, left = tabNode.left, width = tabNode.width, height = tabNode.height;\r\n // Compute the right and bottom edges of the tab area.\r\n var borderWidth = this._box.borderLeft + this._box.borderRight;\r\n var borderHeight = this._box.borderTop + this._box.borderBottom;\r\n var right = rect.width - borderWidth - (left + width);\r\n var bottom = rect.height - borderHeight - (top + height);\r\n // Return the hit test results.\r\n return { tabBar: tabBar, x: x, y: y, top: top, left: left, right: right, bottom: bottom, width: width, height: height };\r\n };\r\n /**\r\n * Perform layout initialization which requires the parent widget.\r\n */\r\n DockLayout.prototype.init = function () {\r\n var _this = this;\r\n // Perform superclass initialization.\r\n _super.prototype.init.call(this);\r\n // Attach each widget to the parent.\r\n algorithm_1.each(this, function (widget) { _this.attachWidget(widget); });\r\n // Attach each handle to the parent.\r\n algorithm_1.each(this.handles(), function (handle) { _this.parent.node.appendChild(handle); });\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * Attach the widget to the layout parent widget.\r\n *\r\n * @param widget - The widget to attach to the parent.\r\n *\r\n * #### Notes\r\n * This is a no-op if the widget is already attached.\r\n */\r\n DockLayout.prototype.attachWidget = function (widget) {\r\n // Do nothing if the widget is already attached.\r\n if (this.parent.node === widget.node.parentNode) {\r\n return;\r\n }\r\n // Create the layout item for the widget.\r\n this._items.set(widget, new layout_1.LayoutItem(widget));\r\n // Send a `'before-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeAttach);\r\n }\r\n // Add the widget's node to the parent.\r\n this.parent.node.appendChild(widget.node);\r\n // Send an `'after-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterAttach);\r\n }\r\n };\r\n /**\r\n * Detach the widget from the layout parent widget.\r\n *\r\n * @param widget - The widget to detach from the parent.\r\n *\r\n * #### Notes\r\n * This is a no-op if the widget is not attached.\r\n */\r\n DockLayout.prototype.detachWidget = function (widget) {\r\n // Do nothing if the widget is not attached.\r\n if (this.parent.node !== widget.node.parentNode) {\r\n return;\r\n }\r\n // Send a `'before-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeDetach);\r\n }\r\n // Remove the widget's node from the parent.\r\n this.parent.node.removeChild(widget.node);\r\n // Send an `'after-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterDetach);\r\n }\r\n // Delete the layout item for the widget.\r\n var item = this._items.get(widget);\r\n if (item) {\r\n this._items.delete(widget);\r\n item.dispose();\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'before-show'` message.\r\n */\r\n DockLayout.prototype.onBeforeShow = function (msg) {\r\n _super.prototype.onBeforeShow.call(this, msg);\r\n this.parent.update();\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n DockLayout.prototype.onBeforeAttach = function (msg) {\r\n _super.prototype.onBeforeAttach.call(this, msg);\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-shown'` message.\r\n */\r\n DockLayout.prototype.onChildShown = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-hidden'` message.\r\n */\r\n DockLayout.prototype.onChildHidden = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'resize'` message.\r\n */\r\n DockLayout.prototype.onResize = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(msg.width, msg.height);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n */\r\n DockLayout.prototype.onUpdateRequest = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(-1, -1);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'fit-request'` message.\r\n */\r\n DockLayout.prototype.onFitRequest = function (msg) {\r\n if (this.parent.isAttached) {\r\n this._fit();\r\n }\r\n };\r\n /**\r\n * Remove the specified widget from the layout structure.\r\n *\r\n * #### Notes\r\n * This is a no-op if the widget is not in the layout tree.\r\n *\r\n * This does not detach the widget from the parent node.\r\n */\r\n DockLayout.prototype._removeWidget = function (widget) {\r\n // Bail early if there is no layout root.\r\n if (!this._root) {\r\n return;\r\n }\r\n // Find the tab node which contains the given widget.\r\n var tabNode = this._root.findTabNode(widget);\r\n // Bail early if the tab node is not found.\r\n if (!tabNode) {\r\n return;\r\n }\r\n // If there are multiple tabs, just remove the widget's tab.\r\n if (tabNode.tabBar.titles.length > 1) {\r\n tabNode.tabBar.removeTab(widget.title);\r\n return;\r\n }\r\n // Otherwise, the tab node needs to be removed...\r\n // Dispose the tab bar.\r\n tabNode.tabBar.dispose();\r\n // Handle the case where the tab node is the root.\r\n if (this._root === tabNode) {\r\n this._root = null;\r\n return;\r\n }\r\n // Otherwise, remove the tab node from its parent...\r\n // Prevent widget resizing unless needed.\r\n this._root.holdAllSizes();\r\n // Clear the parent reference on the tab node.\r\n var splitNode = tabNode.parent;\r\n tabNode.parent = null;\r\n // Remove the tab node from its parent split node.\r\n var i = algorithm_1.ArrayExt.removeFirstOf(splitNode.children, tabNode);\r\n var handle = algorithm_1.ArrayExt.removeAt(splitNode.handles, i);\r\n algorithm_1.ArrayExt.removeAt(splitNode.sizers, i);\r\n // Remove the handle from its parent DOM node.\r\n if (handle.parentNode) {\r\n handle.parentNode.removeChild(handle);\r\n }\r\n // If there are multiple children, just update the handles.\r\n if (splitNode.children.length > 1) {\r\n splitNode.syncHandles();\r\n return;\r\n }\r\n // Otherwise, the split node also needs to be removed...\r\n // Clear the parent reference on the split node.\r\n var maybeParent = splitNode.parent;\r\n splitNode.parent = null;\r\n // Lookup the remaining child node and handle.\r\n var childNode = splitNode.children[0];\r\n var childHandle = splitNode.handles[0];\r\n // Clear the split node data.\r\n splitNode.children.length = 0;\r\n splitNode.handles.length = 0;\r\n splitNode.sizers.length = 0;\r\n // Remove the child handle from its parent node.\r\n if (childHandle.parentNode) {\r\n childHandle.parentNode.removeChild(childHandle);\r\n }\r\n // Handle the case where the split node is the root.\r\n if (this._root === splitNode) {\r\n childNode.parent = null;\r\n this._root = childNode;\r\n return;\r\n }\r\n // Otherwise, move the child node to the parent node...\r\n var parentNode = maybeParent;\r\n // Lookup the index of the split node.\r\n var j = parentNode.children.indexOf(splitNode);\r\n // Handle the case where the child node is a tab node.\r\n if (childNode instanceof Private.TabLayoutNode) {\r\n childNode.parent = parentNode;\r\n parentNode.children[j] = childNode;\r\n return;\r\n }\r\n // Remove the split data from the parent.\r\n var splitHandle = algorithm_1.ArrayExt.removeAt(parentNode.handles, j);\r\n algorithm_1.ArrayExt.removeAt(parentNode.children, j);\r\n algorithm_1.ArrayExt.removeAt(parentNode.sizers, j);\r\n // Remove the handle from its parent node.\r\n if (splitHandle.parentNode) {\r\n splitHandle.parentNode.removeChild(splitHandle);\r\n }\r\n // The child node and the split parent node will have the same\r\n // orientation. Merge the grand-children with the parent node.\r\n for (var i_1 = 0, n = childNode.children.length; i_1 < n; ++i_1) {\r\n var gChild = childNode.children[i_1];\r\n var gHandle = childNode.handles[i_1];\r\n var gSizer = childNode.sizers[i_1];\r\n algorithm_1.ArrayExt.insert(parentNode.children, j + i_1, gChild);\r\n algorithm_1.ArrayExt.insert(parentNode.handles, j + i_1, gHandle);\r\n algorithm_1.ArrayExt.insert(parentNode.sizers, j + i_1, gSizer);\r\n gChild.parent = parentNode;\r\n }\r\n // Clear the child node.\r\n childNode.children.length = 0;\r\n childNode.handles.length = 0;\r\n childNode.sizers.length = 0;\r\n childNode.parent = null;\r\n // Sync the handles on the parent node.\r\n parentNode.syncHandles();\r\n };\r\n /**\r\n * Insert a widget next to an existing tab.\r\n *\r\n * #### Notes\r\n * This does not attach the widget to the parent widget.\r\n */\r\n DockLayout.prototype._insertTab = function (widget, ref, refNode, after) {\r\n // Do nothing if the tab is inserted next to itself.\r\n if (widget === ref) {\r\n return;\r\n }\r\n // Create the root if it does not exist.\r\n if (!this._root) {\r\n var tabNode = new Private.TabLayoutNode(this._createTabBar());\r\n tabNode.tabBar.addTab(widget.title);\r\n this._root = tabNode;\r\n return;\r\n }\r\n // Use the first tab node as the ref node if needed.\r\n if (!refNode) {\r\n refNode = this._root.findFirstTabNode();\r\n }\r\n // If the widget is not contained in the ref node, ensure it is\r\n // removed from the layout and hidden before being added again.\r\n if (refNode.tabBar.titles.indexOf(widget.title) === -1) {\r\n this._removeWidget(widget);\r\n widget.hide();\r\n }\r\n // Lookup the target index for inserting the tab.\r\n var index;\r\n if (ref) {\r\n index = refNode.tabBar.titles.indexOf(ref.title);\r\n }\r\n else {\r\n index = refNode.tabBar.currentIndex;\r\n }\r\n // Insert the widget's tab relative to the target index.\r\n refNode.tabBar.insertTab(index + (after ? 1 : 0), widget.title);\r\n };\r\n /**\r\n * Insert a widget as a new split area.\r\n *\r\n * #### Notes\r\n * This does not attach the widget to the parent widget.\r\n */\r\n DockLayout.prototype._insertSplit = function (widget, ref, refNode, orientation, after) {\r\n // Do nothing if there is no effective split.\r\n if (widget === ref && refNode && refNode.tabBar.titles.length === 1) {\r\n return;\r\n }\r\n // Ensure the widget is removed from the current layout.\r\n this._removeWidget(widget);\r\n // Create the tab layout node to hold the widget.\r\n var tabNode = new Private.TabLayoutNode(this._createTabBar());\r\n tabNode.tabBar.addTab(widget.title);\r\n // Set the root if it does not exist.\r\n if (!this._root) {\r\n this._root = tabNode;\r\n return;\r\n }\r\n // If the ref node parent is null, split the root.\r\n if (!refNode || !refNode.parent) {\r\n // Ensure the root is split with the correct orientation.\r\n var root = this._splitRoot(orientation);\r\n // Determine the insert index for the new tab node.\r\n var i_2 = after ? root.children.length : 0;\r\n // Normalize the split node.\r\n root.normalizeSizes();\r\n // Create the sizer for new tab node.\r\n var sizer = Private.createSizer(refNode ? 1 : Private.GOLDEN_RATIO);\r\n // Insert the tab node sized to the golden ratio.\r\n algorithm_1.ArrayExt.insert(root.children, i_2, tabNode);\r\n algorithm_1.ArrayExt.insert(root.sizers, i_2, sizer);\r\n algorithm_1.ArrayExt.insert(root.handles, i_2, this._createHandle());\r\n tabNode.parent = root;\r\n // Re-normalize the split node to maintain the ratios.\r\n root.normalizeSizes();\r\n // Finally, synchronize the visibility of the handles.\r\n root.syncHandles();\r\n return;\r\n }\r\n // Lookup the split node for the ref widget.\r\n var splitNode = refNode.parent;\r\n // If the split node already had the correct orientation,\r\n // the widget can be inserted into the split node directly.\r\n if (splitNode.orientation === orientation) {\r\n // Find the index of the ref node.\r\n var i_3 = splitNode.children.indexOf(refNode);\r\n // Normalize the split node.\r\n splitNode.normalizeSizes();\r\n // Consume half the space for the insert location.\r\n var s = splitNode.sizers[i_3].sizeHint /= 2;\r\n // Insert the tab node sized to the other half.\r\n var j_1 = i_3 + (after ? 1 : 0);\r\n algorithm_1.ArrayExt.insert(splitNode.children, j_1, tabNode);\r\n algorithm_1.ArrayExt.insert(splitNode.sizers, j_1, Private.createSizer(s));\r\n algorithm_1.ArrayExt.insert(splitNode.handles, j_1, this._createHandle());\r\n tabNode.parent = splitNode;\r\n // Finally, synchronize the visibility of the handles.\r\n splitNode.syncHandles();\r\n return;\r\n }\r\n // Remove the ref node from the split node.\r\n var i = algorithm_1.ArrayExt.removeFirstOf(splitNode.children, refNode);\r\n // Create a new normalized split node for the children.\r\n var childNode = new Private.SplitLayoutNode(orientation);\r\n childNode.normalized = true;\r\n // Add the ref node sized to half the space.\r\n childNode.children.push(refNode);\r\n childNode.sizers.push(Private.createSizer(0.5));\r\n childNode.handles.push(this._createHandle());\r\n refNode.parent = childNode;\r\n // Add the tab node sized to the other half.\r\n var j = after ? 1 : 0;\r\n algorithm_1.ArrayExt.insert(childNode.children, j, tabNode);\r\n algorithm_1.ArrayExt.insert(childNode.sizers, j, Private.createSizer(0.5));\r\n algorithm_1.ArrayExt.insert(childNode.handles, j, this._createHandle());\r\n tabNode.parent = childNode;\r\n // Synchronize the visibility of the handles.\r\n childNode.syncHandles();\r\n // Finally, add the new child node to the original split node.\r\n algorithm_1.ArrayExt.insert(splitNode.children, i, childNode);\r\n childNode.parent = splitNode;\r\n };\r\n /**\r\n * Ensure the root is a split node with the given orientation.\r\n */\r\n DockLayout.prototype._splitRoot = function (orientation) {\r\n // Bail early if the root already meets the requirements.\r\n var oldRoot = this._root;\r\n if (oldRoot instanceof Private.SplitLayoutNode) {\r\n if (oldRoot.orientation === orientation) {\r\n return oldRoot;\r\n }\r\n }\r\n // Create a new root node with the specified orientation.\r\n var newRoot = this._root = new Private.SplitLayoutNode(orientation);\r\n // Add the old root to the new root.\r\n if (oldRoot) {\r\n newRoot.children.push(oldRoot);\r\n newRoot.sizers.push(Private.createSizer(0));\r\n newRoot.handles.push(this._createHandle());\r\n oldRoot.parent = newRoot;\r\n }\r\n // Return the new root as a convenience.\r\n return newRoot;\r\n };\r\n /**\r\n * Fit the layout to the total size required by the widgets.\r\n */\r\n DockLayout.prototype._fit = function () {\r\n // Set up the computed minimum size.\r\n var minW = 0;\r\n var minH = 0;\r\n // Update the size limits for the layout tree.\r\n if (this._root) {\r\n var limits = this._root.fit(this._spacing, this._items);\r\n minW = limits.minWidth;\r\n minH = limits.minHeight;\r\n }\r\n // Update the box sizing and add it to the computed min size.\r\n var box = this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n minW += box.horizontalSum;\r\n minH += box.verticalSum;\r\n // Update the parent's min size constraints.\r\n var style = this.parent.node.style;\r\n style.minWidth = minW + \"px\";\r\n style.minHeight = minH + \"px\";\r\n // Set the dirty flag to ensure only a single update occurs.\r\n this._dirty = true;\r\n // Notify the ancestor that it should fit immediately. This may\r\n // cause a resize of the parent, fulfilling the required update.\r\n if (this.parent.parent) {\r\n messaging_1.MessageLoop.sendMessage(this.parent.parent, widget_1.Widget.Msg.FitRequest);\r\n }\r\n // If the dirty flag is still set, the parent was not resized.\r\n // Trigger the required update on the parent widget immediately.\r\n if (this._dirty) {\r\n messaging_1.MessageLoop.sendMessage(this.parent, widget_1.Widget.Msg.UpdateRequest);\r\n }\r\n };\r\n /**\r\n * Update the layout position and size of the widgets.\r\n *\r\n * The parent offset dimensions should be `-1` if unknown.\r\n */\r\n DockLayout.prototype._update = function (offsetWidth, offsetHeight) {\r\n // Clear the dirty flag to indicate the update occurred.\r\n this._dirty = false;\r\n // Bail early if there is no root layout node.\r\n if (!this._root) {\r\n return;\r\n }\r\n // Measure the parent if the offset dimensions are unknown.\r\n if (offsetWidth < 0) {\r\n offsetWidth = this.parent.node.offsetWidth;\r\n }\r\n if (offsetHeight < 0) {\r\n offsetHeight = this.parent.node.offsetHeight;\r\n }\r\n // Ensure the parent box sizing data is computed.\r\n if (!this._box) {\r\n this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n }\r\n // Compute the actual layout bounds adjusted for border and padding.\r\n var x = this._box.paddingTop;\r\n var y = this._box.paddingLeft;\r\n var width = offsetWidth - this._box.horizontalSum;\r\n var height = offsetHeight - this._box.verticalSum;\r\n // Update the geometry of the layout tree.\r\n this._root.update(x, y, width, height, this._spacing, this._items);\r\n };\r\n /**\r\n * Create a new tab bar for use by the dock layout.\r\n *\r\n * #### Notes\r\n * The tab bar will be attached to the parent if it exists.\r\n */\r\n DockLayout.prototype._createTabBar = function () {\r\n // Create the tab bar using the renderer.\r\n var tabBar = this.renderer.createTabBar();\r\n // Enforce necessary tab bar behavior.\r\n tabBar.orientation = 'horizontal';\r\n // Reparent and attach the tab bar to the parent if possible.\r\n if (this.parent) {\r\n tabBar.parent = this.parent;\r\n this.attachWidget(tabBar);\r\n }\r\n // Return the initialized tab bar.\r\n return tabBar;\r\n };\r\n /**\r\n * Create a new handle for the dock layout.\r\n *\r\n * #### Notes\r\n * The handle will be attached to the parent if it exists.\r\n */\r\n DockLayout.prototype._createHandle = function () {\r\n // Create the handle using the renderer.\r\n var handle = this.renderer.createHandle();\r\n // Initialize the handle layout behavior.\r\n var style = handle.style;\r\n style.position = 'absolute';\r\n style.top = '0';\r\n style.left = '0';\r\n style.width = '0';\r\n style.height = '0';\r\n // Attach the handle to the parent if it exists.\r\n if (this.parent) {\r\n this.parent.node.appendChild(handle);\r\n }\r\n // Return the initialized handle.\r\n return handle;\r\n };\r\n return DockLayout;\r\n}(layout_1.Layout));\r\nexports.DockLayout = DockLayout;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\r\n */\r\n Private.GOLDEN_RATIO = 0.618;\r\n /**\r\n * Clamp a spacing value to an integer >= 0.\r\n */\r\n function clampSpacing(value) {\r\n return Math.max(0, Math.floor(value));\r\n }\r\n Private.clampSpacing = clampSpacing;\r\n /**\r\n * Create a box sizer with an initial size hint.\r\n */\r\n function createSizer(hint) {\r\n var sizer = new boxengine_1.BoxSizer();\r\n sizer.sizeHint = hint;\r\n sizer.size = hint;\r\n return sizer;\r\n }\r\n Private.createSizer = createSizer;\r\n /**\r\n * Normalize an area config object and collect the visited widgets.\r\n */\r\n function normalizeAreaConfig(config, widgetSet) {\r\n var result;\r\n if (config.type === 'tab-area') {\r\n result = normalizeTabAreaConfig(config, widgetSet);\r\n }\r\n else {\r\n result = normalizeSplitAreaConfig(config, widgetSet);\r\n }\r\n return result;\r\n }\r\n Private.normalizeAreaConfig = normalizeAreaConfig;\r\n /**\r\n * Convert a normalized area config into a layout tree.\r\n */\r\n function realizeAreaConfig(config, renderer) {\r\n var node;\r\n if (config.type === 'tab-area') {\r\n node = realizeTabAreaConfig(config, renderer);\r\n }\r\n else {\r\n node = realizeSplitAreaConfig(config, renderer);\r\n }\r\n return node;\r\n }\r\n Private.realizeAreaConfig = realizeAreaConfig;\r\n /**\r\n * A layout node which holds the data for a tabbed area.\r\n */\r\n var TabLayoutNode = /** @class */ (function () {\r\n /**\r\n * Construct a new tab layout node.\r\n *\r\n * @param tabBar - The tab bar to use for the layout node.\r\n */\r\n function TabLayoutNode(tabBar) {\r\n /**\r\n * The parent of the layout node.\r\n */\r\n this.parent = null;\r\n this._top = 0;\r\n this._left = 0;\r\n this._width = 0;\r\n this._height = 0;\r\n var tabSizer = new boxengine_1.BoxSizer();\r\n var widgetSizer = new boxengine_1.BoxSizer();\r\n tabSizer.stretch = 0;\r\n widgetSizer.stretch = 1;\r\n this.tabBar = tabBar;\r\n this.sizers = [tabSizer, widgetSizer];\r\n }\r\n Object.defineProperty(TabLayoutNode.prototype, \"top\", {\r\n /**\r\n * The most recent value for the `top` edge of the layout box.\r\n */\r\n get: function () {\r\n return this._top;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabLayoutNode.prototype, \"left\", {\r\n /**\r\n * The most recent value for the `left` edge of the layout box.\r\n */\r\n get: function () {\r\n return this._left;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabLayoutNode.prototype, \"width\", {\r\n /**\r\n * The most recent value for the `width` of the layout box.\r\n */\r\n get: function () {\r\n return this._width;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabLayoutNode.prototype, \"height\", {\r\n /**\r\n * The most recent value for the `height` of the layout box.\r\n */\r\n get: function () {\r\n return this._height;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Create an iterator for all widgets in the layout tree.\r\n */\r\n TabLayoutNode.prototype.iterAllWidgets = function () {\r\n return algorithm_1.chain(algorithm_1.once(this.tabBar), this.iterUserWidgets());\r\n };\r\n /**\r\n * Create an iterator for the user widgets in the layout tree.\r\n */\r\n TabLayoutNode.prototype.iterUserWidgets = function () {\r\n return algorithm_1.map(this.tabBar.titles, function (title) { return title.owner; });\r\n };\r\n /**\r\n * Create an iterator for the selected widgets in the layout tree.\r\n */\r\n TabLayoutNode.prototype.iterSelectedWidgets = function () {\r\n var title = this.tabBar.currentTitle;\r\n return title ? algorithm_1.once(title.owner) : algorithm_1.empty();\r\n };\r\n /**\r\n * Create an iterator for the tab bars in the layout tree.\r\n */\r\n TabLayoutNode.prototype.iterTabBars = function () {\r\n return algorithm_1.once(this.tabBar);\r\n };\r\n /**\r\n * Create an iterator for the handles in the layout tree.\r\n */\r\n TabLayoutNode.prototype.iterHandles = function () {\r\n return algorithm_1.empty();\r\n };\r\n /**\r\n * Find the tab layout node which contains the given widget.\r\n */\r\n TabLayoutNode.prototype.findTabNode = function (widget) {\r\n return this.tabBar.titles.indexOf(widget.title) !== -1 ? this : null;\r\n };\r\n /**\r\n * Find the split layout node which contains the given handle.\r\n */\r\n TabLayoutNode.prototype.findSplitNode = function (handle) {\r\n return null;\r\n };\r\n /**\r\n * Find the first tab layout node in a layout tree.\r\n */\r\n TabLayoutNode.prototype.findFirstTabNode = function () {\r\n return this;\r\n };\r\n /**\r\n * Find the tab layout node which contains the local point.\r\n */\r\n TabLayoutNode.prototype.hitTestTabNodes = function (x, y) {\r\n if (x < this._left || x >= this._left + this._width) {\r\n return null;\r\n }\r\n if (y < this._top || y >= this._top + this._height) {\r\n return null;\r\n }\r\n return this;\r\n };\r\n /**\r\n * Create a configuration object for the layout tree.\r\n */\r\n TabLayoutNode.prototype.createConfig = function () {\r\n var widgets = this.tabBar.titles.map(function (title) { return title.owner; });\r\n var currentIndex = this.tabBar.currentIndex;\r\n return { type: 'tab-area', widgets: widgets, currentIndex: currentIndex };\r\n };\r\n /**\r\n * Recursively hold all of the sizes in the layout tree.\r\n *\r\n * This ignores the sizers of tab layout nodes.\r\n */\r\n TabLayoutNode.prototype.holdAllSizes = function () {\r\n return;\r\n };\r\n /**\r\n * Fit the layout tree.\r\n */\r\n TabLayoutNode.prototype.fit = function (spacing, items) {\r\n // Set up the limit variables.\r\n var minWidth = 0;\r\n var minHeight = 0;\r\n var maxWidth = Infinity;\r\n var maxHeight = Infinity;\r\n // Lookup the tab bar layout item.\r\n var tabBarItem = items.get(this.tabBar);\r\n // Lookup the widget layout item.\r\n var current = this.tabBar.currentTitle;\r\n var widgetItem = current ? items.get(current.owner) : undefined;\r\n // Lookup the tab bar and widget sizers.\r\n var _a = this.sizers, tabBarSizer = _a[0], widgetSizer = _a[1];\r\n // Update the tab bar limits.\r\n if (tabBarItem) {\r\n tabBarItem.fit();\r\n }\r\n // Update the widget limits.\r\n if (widgetItem) {\r\n widgetItem.fit();\r\n }\r\n // Update the results and sizer for the tab bar.\r\n if (tabBarItem && !tabBarItem.isHidden) {\r\n minWidth = Math.max(minWidth, tabBarItem.minWidth);\r\n minHeight += tabBarItem.minHeight;\r\n tabBarSizer.minSize = tabBarItem.minHeight;\r\n tabBarSizer.maxSize = tabBarItem.maxHeight;\r\n }\r\n else {\r\n tabBarSizer.minSize = 0;\r\n tabBarSizer.maxSize = 0;\r\n }\r\n // Update the results and sizer for the current widget.\r\n if (widgetItem && !widgetItem.isHidden) {\r\n minWidth = Math.max(minWidth, widgetItem.minWidth);\r\n minHeight += widgetItem.minHeight;\r\n widgetSizer.minSize = widgetItem.minHeight;\r\n widgetSizer.maxSize = Infinity;\r\n }\r\n else {\r\n widgetSizer.minSize = 0;\r\n widgetSizer.maxSize = Infinity;\r\n }\r\n // Return the computed size limits for the layout node.\r\n return { minWidth: minWidth, minHeight: minHeight, maxWidth: maxWidth, maxHeight: maxHeight };\r\n };\r\n /**\r\n * Update the layout tree.\r\n */\r\n TabLayoutNode.prototype.update = function (left, top, width, height, spacing, items) {\r\n // Update the layout box values.\r\n this._top = top;\r\n this._left = left;\r\n this._width = width;\r\n this._height = height;\r\n // Lookup the tab bar layout item.\r\n var tabBarItem = items.get(this.tabBar);\r\n // Lookup the widget layout item.\r\n var current = this.tabBar.currentTitle;\r\n var widgetItem = current ? items.get(current.owner) : undefined;\r\n // Distribute the layout space to the sizers.\r\n boxengine_1.BoxEngine.calc(this.sizers, height);\r\n // Update the tab bar item using the computed size.\r\n if (tabBarItem && !tabBarItem.isHidden) {\r\n var size = this.sizers[0].size;\r\n tabBarItem.update(left, top, width, size);\r\n top += size;\r\n }\r\n // Layout the widget using the computed size.\r\n if (widgetItem && !widgetItem.isHidden) {\r\n var size = this.sizers[1].size;\r\n widgetItem.update(left, top, width, size);\r\n }\r\n };\r\n return TabLayoutNode;\r\n }());\r\n Private.TabLayoutNode = TabLayoutNode;\r\n /**\r\n * A layout node which holds the data for a split area.\r\n */\r\n var SplitLayoutNode = /** @class */ (function () {\r\n /**\r\n * Construct a new split layout node.\r\n *\r\n * @param orientation - The orientation of the node.\r\n */\r\n function SplitLayoutNode(orientation) {\r\n /**\r\n * The parent of the layout node.\r\n */\r\n this.parent = null;\r\n /**\r\n * Whether the sizers have been normalized.\r\n */\r\n this.normalized = false;\r\n /**\r\n * The child nodes for the split node.\r\n */\r\n this.children = [];\r\n /**\r\n * The box sizers for the layout children.\r\n */\r\n this.sizers = [];\r\n /**\r\n * The handles for the layout children.\r\n */\r\n this.handles = [];\r\n this.orientation = orientation;\r\n }\r\n /**\r\n * Create an iterator for all widgets in the layout tree.\r\n */\r\n SplitLayoutNode.prototype.iterAllWidgets = function () {\r\n var children = algorithm_1.map(this.children, function (child) { return child.iterAllWidgets(); });\r\n return new algorithm_1.ChainIterator(children);\r\n };\r\n /**\r\n * Create an iterator for the user widgets in the layout tree.\r\n */\r\n SplitLayoutNode.prototype.iterUserWidgets = function () {\r\n var children = algorithm_1.map(this.children, function (child) { return child.iterUserWidgets(); });\r\n return new algorithm_1.ChainIterator(children);\r\n };\r\n /**\r\n * Create an iterator for the selected widgets in the layout tree.\r\n */\r\n SplitLayoutNode.prototype.iterSelectedWidgets = function () {\r\n var children = algorithm_1.map(this.children, function (child) { return child.iterSelectedWidgets(); });\r\n return new algorithm_1.ChainIterator(children);\r\n };\r\n /**\r\n * Create an iterator for the tab bars in the layout tree.\r\n */\r\n SplitLayoutNode.prototype.iterTabBars = function () {\r\n var children = algorithm_1.map(this.children, function (child) { return child.iterTabBars(); });\r\n return new algorithm_1.ChainIterator(children);\r\n };\r\n /**\r\n * Create an iterator for the handles in the layout tree.\r\n */\r\n SplitLayoutNode.prototype.iterHandles = function () {\r\n var children = algorithm_1.map(this.children, function (child) { return child.iterHandles(); });\r\n return algorithm_1.chain(this.handles, new algorithm_1.ChainIterator(children));\r\n };\r\n /**\r\n * Find the tab layout node which contains the given widget.\r\n */\r\n SplitLayoutNode.prototype.findTabNode = function (widget) {\r\n for (var i = 0, n = this.children.length; i < n; ++i) {\r\n var result = this.children[i].findTabNode(widget);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Find the split layout node which contains the given handle.\r\n */\r\n SplitLayoutNode.prototype.findSplitNode = function (handle) {\r\n var index = this.handles.indexOf(handle);\r\n if (index !== -1) {\r\n return { index: index, node: this };\r\n }\r\n for (var i = 0, n = this.children.length; i < n; ++i) {\r\n var result = this.children[i].findSplitNode(handle);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Find the first tab layout node in a layout tree.\r\n */\r\n SplitLayoutNode.prototype.findFirstTabNode = function () {\r\n if (this.children.length === 0) {\r\n return null;\r\n }\r\n return this.children[0].findFirstTabNode();\r\n };\r\n /**\r\n * Find the tab layout node which contains the local point.\r\n */\r\n SplitLayoutNode.prototype.hitTestTabNodes = function (x, y) {\r\n for (var i = 0, n = this.children.length; i < n; ++i) {\r\n var result = this.children[i].hitTestTabNodes(x, y);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Create a configuration object for the layout tree.\r\n */\r\n SplitLayoutNode.prototype.createConfig = function () {\r\n var orientation = this.orientation;\r\n var sizes = this.createNormalizedSizes();\r\n var children = this.children.map(function (child) { return child.createConfig(); });\r\n return { type: 'split-area', orientation: orientation, children: children, sizes: sizes };\r\n };\r\n /**\r\n * Sync the visibility and orientation of the handles.\r\n */\r\n SplitLayoutNode.prototype.syncHandles = function () {\r\n var _this = this;\r\n algorithm_1.each(this.handles, function (handle, i) {\r\n handle.setAttribute('data-orientation', _this.orientation);\r\n if (i === _this.handles.length - 1) {\r\n handle.classList.add('p-mod-hidden');\r\n }\r\n else {\r\n handle.classList.remove('p-mod-hidden');\r\n }\r\n });\r\n };\r\n /**\r\n * Hold the current sizes of the box sizers.\r\n *\r\n * This sets the size hint of each sizer to its current size.\r\n */\r\n SplitLayoutNode.prototype.holdSizes = function () {\r\n algorithm_1.each(this.sizers, function (sizer) { sizer.sizeHint = sizer.size; });\r\n };\r\n /**\r\n * Recursively hold all of the sizes in the layout tree.\r\n *\r\n * This ignores the sizers of tab layout nodes.\r\n */\r\n SplitLayoutNode.prototype.holdAllSizes = function () {\r\n algorithm_1.each(this.children, function (child) { return child.holdAllSizes(); });\r\n this.holdSizes();\r\n };\r\n /**\r\n * Normalize the sizes of the split layout node.\r\n */\r\n SplitLayoutNode.prototype.normalizeSizes = function () {\r\n // Bail early if the sizers are empty.\r\n var n = this.sizers.length;\r\n if (n === 0) {\r\n return;\r\n }\r\n // Hold the current sizes of the sizers.\r\n this.holdSizes();\r\n // Compute the sum of the sizes.\r\n var sum = algorithm_1.reduce(this.sizers, function (v, sizer) { return v + sizer.sizeHint; }, 0);\r\n // Normalize the sizes based on the sum.\r\n if (sum === 0) {\r\n algorithm_1.each(this.sizers, function (sizer) {\r\n sizer.size = sizer.sizeHint = 1 / n;\r\n });\r\n }\r\n else {\r\n algorithm_1.each(this.sizers, function (sizer) {\r\n sizer.size = sizer.sizeHint /= sum;\r\n });\r\n }\r\n // Mark the sizes as normalized.\r\n this.normalized = true;\r\n };\r\n /**\r\n * Snap the normalized sizes of the split layout node.\r\n */\r\n SplitLayoutNode.prototype.createNormalizedSizes = function () {\r\n // Bail early if the sizers are empty.\r\n var n = this.sizers.length;\r\n if (n === 0) {\r\n return [];\r\n }\r\n // Grab the current sizes of the sizers.\r\n var sizes = this.sizers.map(function (sizer) { return sizer.size; });\r\n // Compute the sum of the sizes.\r\n var sum = algorithm_1.reduce(sizes, function (v, size) { return v + size; }, 0);\r\n // Normalize the sizes based on the sum.\r\n if (sum === 0) {\r\n algorithm_1.each(sizes, function (size, i) { sizes[i] = 1 / n; });\r\n }\r\n else {\r\n algorithm_1.each(sizes, function (size, i) { sizes[i] = size / sum; });\r\n }\r\n // Return the normalized sizes.\r\n return sizes;\r\n };\r\n /**\r\n * Fit the layout tree.\r\n */\r\n SplitLayoutNode.prototype.fit = function (spacing, items) {\r\n // Compute the required fixed space.\r\n var horizontal = this.orientation === 'horizontal';\r\n var fixed = Math.max(0, this.children.length - 1) * spacing;\r\n // Set up the limit variables.\r\n var minWidth = horizontal ? fixed : 0;\r\n var minHeight = horizontal ? 0 : fixed;\r\n var maxWidth = Infinity;\r\n var maxHeight = Infinity;\r\n // Fit the children and update the limits.\r\n for (var i = 0, n = this.children.length; i < n; ++i) {\r\n var limits = this.children[i].fit(spacing, items);\r\n if (horizontal) {\r\n minHeight = Math.max(minHeight, limits.minHeight);\r\n minWidth += limits.minWidth;\r\n this.sizers[i].minSize = limits.minWidth;\r\n }\r\n else {\r\n minWidth = Math.max(minWidth, limits.minWidth);\r\n minHeight += limits.minHeight;\r\n this.sizers[i].minSize = limits.minHeight;\r\n }\r\n }\r\n // Return the computed limits for the layout node.\r\n return { minWidth: minWidth, minHeight: minHeight, maxWidth: maxWidth, maxHeight: maxHeight };\r\n };\r\n /**\r\n * Update the layout tree.\r\n */\r\n SplitLayoutNode.prototype.update = function (left, top, width, height, spacing, items) {\r\n // Compute the available layout space.\r\n var horizontal = this.orientation === 'horizontal';\r\n var fixed = Math.max(0, this.children.length - 1) * spacing;\r\n var space = Math.max(0, (horizontal ? width : height) - fixed);\r\n // De-normalize the sizes if needed.\r\n if (this.normalized) {\r\n algorithm_1.each(this.sizers, function (sizer) { sizer.sizeHint *= space; });\r\n this.normalized = false;\r\n }\r\n // Distribute the layout space to the sizers.\r\n boxengine_1.BoxEngine.calc(this.sizers, space);\r\n // Update the geometry of the child nodes and handles.\r\n for (var i = 0, n = this.children.length; i < n; ++i) {\r\n var child = this.children[i];\r\n var size = this.sizers[i].size;\r\n var handleStyle = this.handles[i].style;\r\n if (horizontal) {\r\n child.update(left, top, size, height, spacing, items);\r\n left += size;\r\n handleStyle.top = top + \"px\";\r\n handleStyle.left = left + \"px\";\r\n handleStyle.width = spacing + \"px\";\r\n handleStyle.height = height + \"px\";\r\n left += spacing;\r\n }\r\n else {\r\n child.update(left, top, width, size, spacing, items);\r\n top += size;\r\n handleStyle.top = top + \"px\";\r\n handleStyle.left = left + \"px\";\r\n handleStyle.width = width + \"px\";\r\n handleStyle.height = spacing + \"px\";\r\n top += spacing;\r\n }\r\n }\r\n };\r\n return SplitLayoutNode;\r\n }());\r\n Private.SplitLayoutNode = SplitLayoutNode;\r\n /**\r\n * Normalize a tab area config and collect the visited widgets.\r\n */\r\n function normalizeTabAreaConfig(config, widgetSet) {\r\n // Bail early if there is no content.\r\n if (config.widgets.length === 0) {\r\n return null;\r\n }\r\n // Setup the filtered widgets array.\r\n var widgets = [];\r\n // Filter the config for unique widgets.\r\n algorithm_1.each(config.widgets, function (widget) {\r\n if (!widgetSet.has(widget)) {\r\n widgetSet.add(widget);\r\n widgets.push(widget);\r\n }\r\n });\r\n // Bail if there are no effective widgets.\r\n if (widgets.length === 0) {\r\n return null;\r\n }\r\n // Normalize the current index.\r\n var index = config.currentIndex;\r\n if (index !== -1 && (index < 0 || index >= widgets.length)) {\r\n index = 0;\r\n }\r\n // Return a normalized config object.\r\n return { type: 'tab-area', widgets: widgets, currentIndex: index };\r\n }\r\n /**\r\n * Normalize a split area config and collect the visited widgets.\r\n */\r\n function normalizeSplitAreaConfig(config, widgetSet) {\r\n // Set up the result variables.\r\n var orientation = config.orientation;\r\n var children = [];\r\n var sizes = [];\r\n // Normalize the config children.\r\n for (var i = 0, n = config.children.length; i < n; ++i) {\r\n // Normalize the child config.\r\n var child = normalizeAreaConfig(config.children[i], widgetSet);\r\n // Ignore an empty child.\r\n if (!child) {\r\n continue;\r\n }\r\n // Add the child or hoist its content as appropriate.\r\n if (child.type === 'tab-area' || child.orientation !== orientation) {\r\n children.push(child);\r\n sizes.push(Math.abs(config.sizes[i] || 0));\r\n }\r\n else {\r\n children.push.apply(children, child.children);\r\n sizes.push.apply(sizes, child.sizes);\r\n }\r\n }\r\n // Bail if there are no effective children.\r\n if (children.length === 0) {\r\n return null;\r\n }\r\n // If there is only one effective child, return that child.\r\n if (children.length === 1) {\r\n return children[0];\r\n }\r\n // Return a normalized config object.\r\n return { type: 'split-area', orientation: orientation, children: children, sizes: sizes };\r\n }\r\n /**\r\n * Convert a normalized tab area config into a layout tree.\r\n */\r\n function realizeTabAreaConfig(config, renderer) {\r\n // Create the tab bar for the layout node.\r\n var tabBar = renderer.createTabBar();\r\n // Hide each widget and add it to the tab bar.\r\n algorithm_1.each(config.widgets, function (widget) {\r\n widget.hide();\r\n tabBar.addTab(widget.title);\r\n });\r\n // Set the current index of the tab bar.\r\n tabBar.currentIndex = config.currentIndex;\r\n // Return the new tab layout node.\r\n return new TabLayoutNode(tabBar);\r\n }\r\n /**\r\n * Convert a normalized split area config into a layout tree.\r\n */\r\n function realizeSplitAreaConfig(config, renderer) {\r\n // Create the split layout node.\r\n var node = new SplitLayoutNode(config.orientation);\r\n // Add each child to the layout node.\r\n algorithm_1.each(config.children, function (child, i) {\r\n // Create the child data for the layout node.\r\n var childNode = realizeAreaConfig(child, renderer);\r\n var sizer = createSizer(config.sizes[i]);\r\n var handle = renderer.createHandle();\r\n // Add the child data to the layout node.\r\n node.children.push(childNode);\r\n node.handles.push(handle);\r\n node.sizers.push(sizer);\r\n // Update the parent for the child node.\r\n childNode.parent = node;\r\n });\r\n // Synchronize the handle state for the layout node.\r\n node.syncHandles();\r\n // Normalize the sizes for the layout node.\r\n node.normalizeSizes();\r\n // Return the new layout node.\r\n return node;\r\n }\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar properties_1 = require(\"@phosphor/properties\");\r\nvar boxengine_1 = require(\"./boxengine\");\r\nvar layout_1 = require(\"./layout\");\r\nvar panellayout_1 = require(\"./panellayout\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A layout which arranges its widgets into resizable sections.\r\n */\r\nvar SplitLayout = /** @class */ (function (_super) {\r\n __extends(SplitLayout, _super);\r\n /**\r\n * Construct a new split layout.\r\n *\r\n * @param options - The options for initializing the layout.\r\n */\r\n function SplitLayout(options) {\r\n var _this = _super.call(this) || this;\r\n _this._fixed = 0;\r\n _this._spacing = 4;\r\n _this._dirty = false;\r\n _this._hasNormedSizes = false;\r\n _this._sizers = [];\r\n _this._items = [];\r\n _this._handles = [];\r\n _this._box = null;\r\n _this._alignment = 'start';\r\n _this._orientation = 'horizontal';\r\n _this.renderer = options.renderer;\r\n if (options.orientation !== undefined) {\r\n _this._orientation = options.orientation;\r\n }\r\n if (options.alignment !== undefined) {\r\n _this._alignment = options.alignment;\r\n }\r\n if (options.spacing !== undefined) {\r\n _this._spacing = Private.clampSpacing(options.spacing);\r\n }\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the layout.\r\n */\r\n SplitLayout.prototype.dispose = function () {\r\n // Dispose of the layout items.\r\n algorithm_1.each(this._items, function (item) { item.dispose(); });\r\n // Clear the layout state.\r\n this._box = null;\r\n this._items.length = 0;\r\n this._sizers.length = 0;\r\n this._handles.length = 0;\r\n // Dispose of the rest of the layout.\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(SplitLayout.prototype, \"orientation\", {\r\n /**\r\n * Get the layout orientation for the split layout.\r\n */\r\n get: function () {\r\n return this._orientation;\r\n },\r\n /**\r\n * Set the layout orientation for the split layout.\r\n */\r\n set: function (value) {\r\n if (this._orientation === value) {\r\n return;\r\n }\r\n this._orientation = value;\r\n if (!this.parent) {\r\n return;\r\n }\r\n this.parent.dataset['orientation'] = value;\r\n this.parent.fit();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SplitLayout.prototype, \"alignment\", {\r\n /**\r\n * Get the content alignment for the split layout.\r\n *\r\n * #### Notes\r\n * This is the alignment of the widgets in the layout direction.\r\n *\r\n * The alignment has no effect if the widgets can expand to fill the\r\n * entire split layout.\r\n */\r\n get: function () {\r\n return this._alignment;\r\n },\r\n /**\r\n * Set the content alignment for the split layout.\r\n *\r\n * #### Notes\r\n * This is the alignment of the widgets in the layout direction.\r\n *\r\n * The alignment has no effect if the widgets can expand to fill the\r\n * entire split layout.\r\n */\r\n set: function (value) {\r\n if (this._alignment === value) {\r\n return;\r\n }\r\n this._alignment = value;\r\n if (!this.parent) {\r\n return;\r\n }\r\n this.parent.dataset['alignment'] = value;\r\n this.parent.update();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SplitLayout.prototype, \"spacing\", {\r\n /**\r\n * Get the inter-element spacing for the split layout.\r\n */\r\n get: function () {\r\n return this._spacing;\r\n },\r\n /**\r\n * Set the inter-element spacing for the split layout.\r\n */\r\n set: function (value) {\r\n value = Private.clampSpacing(value);\r\n if (this._spacing === value) {\r\n return;\r\n }\r\n this._spacing = value;\r\n if (!this.parent) {\r\n return;\r\n }\r\n this.parent.fit();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SplitLayout.prototype, \"handles\", {\r\n /**\r\n * A read-only array of the split handles in the layout.\r\n */\r\n get: function () {\r\n return this._handles;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Get the relative sizes of the widgets in the layout.\r\n *\r\n * @returns A new array of the relative sizes of the widgets.\r\n *\r\n * #### Notes\r\n * The returned sizes reflect the sizes of the widgets normalized\r\n * relative to their siblings.\r\n *\r\n * This method **does not** measure the DOM nodes.\r\n */\r\n SplitLayout.prototype.relativeSizes = function () {\r\n return Private.normalize(this._sizers.map(function (sizer) { return sizer.size; }));\r\n };\r\n /**\r\n * Set the relative sizes for the widgets in the layout.\r\n *\r\n * @param sizes - The relative sizes for the widgets in the panel.\r\n *\r\n * #### Notes\r\n * Extra values are ignored, too few will yield an undefined layout.\r\n *\r\n * The actual geometry of the DOM nodes is updated asynchronously.\r\n */\r\n SplitLayout.prototype.setRelativeSizes = function (sizes) {\r\n // Copy the sizes and pad with zeros as needed.\r\n var n = this._sizers.length;\r\n var temp = sizes.slice(0, n);\r\n while (temp.length < n) {\r\n temp.push(0);\r\n }\r\n // Normalize the padded sizes.\r\n var normed = Private.normalize(temp);\r\n // Apply the normalized sizes to the sizers.\r\n for (var i = 0; i < n; ++i) {\r\n var sizer = this._sizers[i];\r\n sizer.sizeHint = normed[i];\r\n sizer.size = normed[i];\r\n }\r\n // Set the flag indicating the sizes are normalized.\r\n this._hasNormedSizes = true;\r\n // Trigger an update of the parent widget.\r\n if (this.parent) {\r\n this.parent.update();\r\n }\r\n };\r\n /**\r\n * Move the offset position of a split handle.\r\n *\r\n * @param index - The index of the handle of the interest.\r\n *\r\n * @param position - The desired offset position of the handle.\r\n *\r\n * #### Notes\r\n * The position is relative to the offset parent.\r\n *\r\n * This will move the handle as close as possible to the desired\r\n * position. The sibling widgets will be adjusted as necessary.\r\n */\r\n SplitLayout.prototype.moveHandle = function (index, position) {\r\n // Bail if the index is invalid or the handle is hidden.\r\n var handle = this._handles[index];\r\n if (!handle || handle.classList.contains('p-mod-hidden')) {\r\n return;\r\n }\r\n // Compute the desired delta movement for the handle.\r\n var delta;\r\n if (this._orientation === 'horizontal') {\r\n delta = position - handle.offsetLeft;\r\n }\r\n else {\r\n delta = position - handle.offsetTop;\r\n }\r\n // Bail if there is no handle movement.\r\n if (delta === 0) {\r\n return;\r\n }\r\n // Prevent widget resizing unless needed.\r\n for (var _i = 0, _a = this._sizers; _i < _a.length; _i++) {\r\n var sizer = _a[_i];\r\n if (sizer.size > 0) {\r\n sizer.sizeHint = sizer.size;\r\n }\r\n }\r\n // Adjust the sizers to reflect the handle movement.\r\n boxengine_1.BoxEngine.adjust(this._sizers, index, delta);\r\n // Update the layout of the widgets.\r\n if (this.parent) {\r\n this.parent.update();\r\n }\r\n };\r\n /**\r\n * Perform layout initialization which requires the parent widget.\r\n */\r\n SplitLayout.prototype.init = function () {\r\n this.parent.dataset['orientation'] = this.orientation;\r\n this.parent.dataset['alignment'] = this.alignment;\r\n _super.prototype.init.call(this);\r\n };\r\n /**\r\n * Attach a widget to the parent's DOM node.\r\n *\r\n * @param index - The current index of the widget in the layout.\r\n *\r\n * @param widget - The widget to attach to the parent.\r\n *\r\n * #### Notes\r\n * This is a reimplementation of the superclass method.\r\n */\r\n SplitLayout.prototype.attachWidget = function (index, widget) {\r\n // Create the item, handle, and sizer for the new widget.\r\n var item = new layout_1.LayoutItem(widget);\r\n var handle = Private.createHandle(this.renderer);\r\n var average = Private.averageSize(this._sizers);\r\n var sizer = Private.createSizer(average);\r\n // Insert the item, handle, and sizer into the internal arrays.\r\n algorithm_1.ArrayExt.insert(this._items, index, item);\r\n algorithm_1.ArrayExt.insert(this._sizers, index, sizer);\r\n algorithm_1.ArrayExt.insert(this._handles, index, handle);\r\n // Send a `'before-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeAttach);\r\n }\r\n // Add the widget and handle nodes to the parent.\r\n this.parent.node.appendChild(widget.node);\r\n this.parent.node.appendChild(handle);\r\n // Send an `'after-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterAttach);\r\n }\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * Move a widget in the parent's DOM node.\r\n *\r\n * @param fromIndex - The previous index of the widget in the layout.\r\n *\r\n * @param toIndex - The current index of the widget in the layout.\r\n *\r\n * @param widget - The widget to move in the parent.\r\n *\r\n * #### Notes\r\n * This is a reimplementation of the superclass method.\r\n */\r\n SplitLayout.prototype.moveWidget = function (fromIndex, toIndex, widget) {\r\n // Move the item, sizer, and handle for the widget.\r\n algorithm_1.ArrayExt.move(this._items, fromIndex, toIndex);\r\n algorithm_1.ArrayExt.move(this._sizers, fromIndex, toIndex);\r\n algorithm_1.ArrayExt.move(this._handles, fromIndex, toIndex);\r\n // Post a fit request to the parent to show/hide last handle.\r\n this.parent.fit();\r\n };\r\n /**\r\n * Detach a widget from the parent's DOM node.\r\n *\r\n * @param index - The previous index of the widget in the layout.\r\n *\r\n * @param widget - The widget to detach from the parent.\r\n *\r\n * #### Notes\r\n * This is a reimplementation of the superclass method.\r\n */\r\n SplitLayout.prototype.detachWidget = function (index, widget) {\r\n // Remove the item, handle, and sizer for the widget.\r\n var item = algorithm_1.ArrayExt.removeAt(this._items, index);\r\n var handle = algorithm_1.ArrayExt.removeAt(this._handles, index);\r\n algorithm_1.ArrayExt.removeAt(this._sizers, index);\r\n // Send a `'before-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeDetach);\r\n }\r\n // Remove the widget and handle nodes from the parent.\r\n this.parent.node.removeChild(widget.node);\r\n this.parent.node.removeChild(handle);\r\n // Send an `'after-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterDetach);\r\n }\r\n // Dispose of the layout item.\r\n item.dispose();\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'before-show'` message.\r\n */\r\n SplitLayout.prototype.onBeforeShow = function (msg) {\r\n _super.prototype.onBeforeShow.call(this, msg);\r\n this.parent.update();\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n SplitLayout.prototype.onBeforeAttach = function (msg) {\r\n _super.prototype.onBeforeAttach.call(this, msg);\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-shown'` message.\r\n */\r\n SplitLayout.prototype.onChildShown = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-hidden'` message.\r\n */\r\n SplitLayout.prototype.onChildHidden = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'resize'` message.\r\n */\r\n SplitLayout.prototype.onResize = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(msg.width, msg.height);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n */\r\n SplitLayout.prototype.onUpdateRequest = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(-1, -1);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'fit-request'` message.\r\n */\r\n SplitLayout.prototype.onFitRequest = function (msg) {\r\n if (this.parent.isAttached) {\r\n this._fit();\r\n }\r\n };\r\n /**\r\n * Fit the layout to the total size required by the widgets.\r\n */\r\n SplitLayout.prototype._fit = function () {\r\n // Update the handles and track the visible widget count.\r\n var nVisible = 0;\r\n var lastHandleIndex = -1;\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n if (this._items[i].isHidden) {\r\n this._handles[i].classList.add('p-mod-hidden');\r\n }\r\n else {\r\n this._handles[i].classList.remove('p-mod-hidden');\r\n lastHandleIndex = i;\r\n nVisible++;\r\n }\r\n }\r\n // Hide the handle for the last visible widget.\r\n if (lastHandleIndex !== -1) {\r\n this._handles[lastHandleIndex].classList.add('p-mod-hidden');\r\n }\r\n // Update the fixed space for the visible items.\r\n this._fixed = this._spacing * Math.max(0, nVisible - 1);\r\n // Setup the computed minimum size.\r\n var horz = this._orientation === 'horizontal';\r\n var minW = horz ? this._fixed : 0;\r\n var minH = horz ? 0 : this._fixed;\r\n // Update the sizers and computed size limits.\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n // Fetch the item and corresponding box sizer.\r\n var item = this._items[i];\r\n var sizer = this._sizers[i];\r\n // Prevent resizing unless necessary.\r\n if (sizer.size > 0) {\r\n sizer.sizeHint = sizer.size;\r\n }\r\n // If the item is hidden, it should consume zero size.\r\n if (item.isHidden) {\r\n sizer.minSize = 0;\r\n sizer.maxSize = 0;\r\n continue;\r\n }\r\n // Update the size limits for the item.\r\n item.fit();\r\n // Update the stretch factor.\r\n sizer.stretch = SplitLayout.getStretch(item.widget);\r\n // Update the sizer limits and computed min size.\r\n if (horz) {\r\n sizer.minSize = item.minWidth;\r\n sizer.maxSize = item.maxWidth;\r\n minW += item.minWidth;\r\n minH = Math.max(minH, item.minHeight);\r\n }\r\n else {\r\n sizer.minSize = item.minHeight;\r\n sizer.maxSize = item.maxHeight;\r\n minH += item.minHeight;\r\n minW = Math.max(minW, item.minWidth);\r\n }\r\n }\r\n // Update the box sizing and add it to the computed min size.\r\n var box = this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n minW += box.horizontalSum;\r\n minH += box.verticalSum;\r\n // Update the parent's min size constraints.\r\n var style = this.parent.node.style;\r\n style.minWidth = minW + \"px\";\r\n style.minHeight = minH + \"px\";\r\n // Set the dirty flag to ensure only a single update occurs.\r\n this._dirty = true;\r\n // Notify the ancestor that it should fit immediately. This may\r\n // cause a resize of the parent, fulfilling the required update.\r\n if (this.parent.parent) {\r\n messaging_1.MessageLoop.sendMessage(this.parent.parent, widget_1.Widget.Msg.FitRequest);\r\n }\r\n // If the dirty flag is still set, the parent was not resized.\r\n // Trigger the required update on the parent widget immediately.\r\n if (this._dirty) {\r\n messaging_1.MessageLoop.sendMessage(this.parent, widget_1.Widget.Msg.UpdateRequest);\r\n }\r\n };\r\n /**\r\n * Update the layout position and size of the widgets.\r\n *\r\n * The parent offset dimensions should be `-1` if unknown.\r\n */\r\n SplitLayout.prototype._update = function (offsetWidth, offsetHeight) {\r\n // Clear the dirty flag to indicate the update occurred.\r\n this._dirty = false;\r\n // Compute the visible item count.\r\n var nVisible = 0;\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n nVisible += +!this._items[i].isHidden;\r\n }\r\n // Bail early if there are no visible items to layout.\r\n if (nVisible === 0) {\r\n return;\r\n }\r\n // Measure the parent if the offset dimensions are unknown.\r\n if (offsetWidth < 0) {\r\n offsetWidth = this.parent.node.offsetWidth;\r\n }\r\n if (offsetHeight < 0) {\r\n offsetHeight = this.parent.node.offsetHeight;\r\n }\r\n // Ensure the parent box sizing data is computed.\r\n if (!this._box) {\r\n this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n }\r\n // Compute the actual layout bounds adjusted for border and padding.\r\n var top = this._box.paddingTop;\r\n var left = this._box.paddingLeft;\r\n var width = offsetWidth - this._box.horizontalSum;\r\n var height = offsetHeight - this._box.verticalSum;\r\n // Compute the adjusted layout space.\r\n var space;\r\n var horz = this._orientation === 'horizontal';\r\n if (horz) {\r\n space = Math.max(0, width - this._fixed);\r\n }\r\n else {\r\n space = Math.max(0, height - this._fixed);\r\n }\r\n // Scale the size hints if they are normalized.\r\n if (this._hasNormedSizes) {\r\n for (var _i = 0, _a = this._sizers; _i < _a.length; _i++) {\r\n var sizer = _a[_i];\r\n sizer.sizeHint *= space;\r\n }\r\n this._hasNormedSizes = false;\r\n }\r\n // Distribute the layout space to the box sizers.\r\n var delta = boxengine_1.BoxEngine.calc(this._sizers, space);\r\n // Set up the variables for justification and alignment offset.\r\n var extra = 0;\r\n var offset = 0;\r\n // Account for alignment if there is extra layout space.\r\n if (delta > 0) {\r\n switch (this._alignment) {\r\n case 'start':\r\n break;\r\n case 'center':\r\n extra = 0;\r\n offset = delta / 2;\r\n break;\r\n case 'end':\r\n extra = 0;\r\n offset = delta;\r\n break;\r\n case 'justify':\r\n extra = delta / nVisible;\r\n offset = 0;\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n }\r\n // Layout the items using the computed box sizes.\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n // Fetch the item.\r\n var item = this._items[i];\r\n // Ignore hidden items.\r\n if (item.isHidden) {\r\n continue;\r\n }\r\n // Fetch the computed size for the widget.\r\n var size = this._sizers[i].size;\r\n // Fetch the style for the handle.\r\n var handleStyle = this._handles[i].style;\r\n // Update the widget and handle, and advance the relevant edge.\r\n if (horz) {\r\n item.update(left + offset, top, size + extra, height);\r\n left += size + extra;\r\n handleStyle.top = top + \"px\";\r\n handleStyle.left = left + offset + \"px\";\r\n handleStyle.width = this._spacing + \"px\";\r\n handleStyle.height = height + \"px\";\r\n left += this._spacing;\r\n }\r\n else {\r\n item.update(left, top + offset, width, size + extra);\r\n top += size + extra;\r\n handleStyle.top = top + offset + \"px\";\r\n handleStyle.left = left + \"px\";\r\n handleStyle.width = width + \"px\";\r\n handleStyle.height = this._spacing + \"px\";\r\n top += this._spacing;\r\n }\r\n }\r\n };\r\n return SplitLayout;\r\n}(panellayout_1.PanelLayout));\r\nexports.SplitLayout = SplitLayout;\r\n/**\r\n * The namespace for the `SplitLayout` class statics.\r\n */\r\n(function (SplitLayout) {\r\n /**\r\n * Get the split layout stretch factor for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The split layout stretch factor for the widget.\r\n */\r\n function getStretch(widget) {\r\n return Private.stretchProperty.get(widget);\r\n }\r\n SplitLayout.getStretch = getStretch;\r\n /**\r\n * Set the split layout stretch factor for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param value - The value for the stretch factor.\r\n */\r\n function setStretch(widget, value) {\r\n Private.stretchProperty.set(widget, value);\r\n }\r\n SplitLayout.setStretch = setStretch;\r\n})(SplitLayout = exports.SplitLayout || (exports.SplitLayout = {}));\r\nexports.SplitLayout = SplitLayout;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * The property descriptor for a widget stretch factor.\r\n */\r\n Private.stretchProperty = new properties_1.AttachedProperty({\r\n name: 'stretch',\r\n create: function () { return 0; },\r\n coerce: function (owner, value) { return Math.max(0, Math.floor(value)); },\r\n changed: onChildSizingChanged\r\n });\r\n /**\r\n * Create a new box sizer with the given size hint.\r\n */\r\n function createSizer(size) {\r\n var sizer = new boxengine_1.BoxSizer();\r\n sizer.sizeHint = Math.floor(size);\r\n return sizer;\r\n }\r\n Private.createSizer = createSizer;\r\n /**\r\n * Create a new split handle node using the given renderer.\r\n */\r\n function createHandle(renderer) {\r\n var handle = renderer.createHandle();\r\n handle.style.position = 'absolute';\r\n return handle;\r\n }\r\n Private.createHandle = createHandle;\r\n /**\r\n * Clamp a spacing value to an integer >= 0.\r\n */\r\n function clampSpacing(value) {\r\n return Math.max(0, Math.floor(value));\r\n }\r\n Private.clampSpacing = clampSpacing;\r\n /**\r\n * Compute the average size of an array of box sizers.\r\n */\r\n function averageSize(sizers) {\r\n return sizers.reduce(function (v, s) { return v + s.size; }, 0) / sizers.length || 0;\r\n }\r\n Private.averageSize = averageSize;\r\n /**\r\n * Normalize an array of values.\r\n */\r\n function normalize(values) {\r\n var n = values.length;\r\n if (n === 0) {\r\n return [];\r\n }\r\n var sum = values.reduce(function (a, b) { return a + Math.abs(b); }, 0);\r\n return sum === 0 ? values.map(function (v) { return 1 / n; }) : values.map(function (v) { return v / sum; });\r\n }\r\n Private.normalize = normalize;\r\n /**\r\n * The change handler for the attached sizing properties.\r\n */\r\n function onChildSizingChanged(child) {\r\n if (child.parent && child.parent.layout instanceof SplitLayout) {\r\n child.parent.fit();\r\n }\r\n }\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar layout_1 = require(\"./layout\");\r\nvar panellayout_1 = require(\"./panellayout\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A layout where visible widgets are stacked atop one another.\r\n *\r\n * #### Notes\r\n * The Z-order of the visible widgets follows their layout order.\r\n */\r\nvar StackedLayout = /** @class */ (function (_super) {\r\n __extends(StackedLayout, _super);\r\n function StackedLayout() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this._dirty = false;\r\n _this._items = [];\r\n _this._box = null;\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the layout.\r\n */\r\n StackedLayout.prototype.dispose = function () {\r\n // Dispose of the layout items.\r\n algorithm_1.each(this._items, function (item) { item.dispose(); });\r\n // Clear the layout state.\r\n this._box = null;\r\n this._items.length = 0;\r\n // Dispose of the rest of the layout.\r\n _super.prototype.dispose.call(this);\r\n };\r\n /**\r\n * Attach a widget to the parent's DOM node.\r\n *\r\n * @param index - The current index of the widget in the layout.\r\n *\r\n * @param widget - The widget to attach to the parent.\r\n *\r\n * #### Notes\r\n * This is a reimplementation of the superclass method.\r\n */\r\n StackedLayout.prototype.attachWidget = function (index, widget) {\r\n // Create and add a new layout item for the widget.\r\n algorithm_1.ArrayExt.insert(this._items, index, new layout_1.LayoutItem(widget));\r\n // Send a `'before-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeAttach);\r\n }\r\n // Add the widget's node to the parent.\r\n this.parent.node.appendChild(widget.node);\r\n // Send an `'after-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterAttach);\r\n }\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * Move a widget in the parent's DOM node.\r\n *\r\n * @param fromIndex - The previous index of the widget in the layout.\r\n *\r\n * @param toIndex - The current index of the widget in the layout.\r\n *\r\n * @param widget - The widget to move in the parent.\r\n *\r\n * #### Notes\r\n * This is a reimplementation of the superclass method.\r\n */\r\n StackedLayout.prototype.moveWidget = function (fromIndex, toIndex, widget) {\r\n // Move the layout item for the widget.\r\n algorithm_1.ArrayExt.move(this._items, fromIndex, toIndex);\r\n // Post an update request for the parent widget.\r\n this.parent.update();\r\n };\r\n /**\r\n * Detach a widget from the parent's DOM node.\r\n *\r\n * @param index - The previous index of the widget in the layout.\r\n *\r\n * @param widget - The widget to detach from the parent.\r\n *\r\n * #### Notes\r\n * This is a reimplementation of the superclass method.\r\n */\r\n StackedLayout.prototype.detachWidget = function (index, widget) {\r\n // Remove the layout item for the widget.\r\n var item = algorithm_1.ArrayExt.removeAt(this._items, index);\r\n // Send a `'before-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeDetach);\r\n }\r\n // Remove the widget's node from the parent.\r\n this.parent.node.removeChild(widget.node);\r\n // Send an `'after-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterDetach);\r\n }\r\n // Reset the z-index for the widget.\r\n item.widget.node.style.zIndex = '';\r\n // Dispose of the layout item.\r\n item.dispose();\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'before-show'` message.\r\n */\r\n StackedLayout.prototype.onBeforeShow = function (msg) {\r\n _super.prototype.onBeforeShow.call(this, msg);\r\n this.parent.update();\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n StackedLayout.prototype.onBeforeAttach = function (msg) {\r\n _super.prototype.onBeforeAttach.call(this, msg);\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-shown'` message.\r\n */\r\n StackedLayout.prototype.onChildShown = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-hidden'` message.\r\n */\r\n StackedLayout.prototype.onChildHidden = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'resize'` message.\r\n */\r\n StackedLayout.prototype.onResize = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(msg.width, msg.height);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n */\r\n StackedLayout.prototype.onUpdateRequest = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(-1, -1);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'fit-request'` message.\r\n */\r\n StackedLayout.prototype.onFitRequest = function (msg) {\r\n if (this.parent.isAttached) {\r\n this._fit();\r\n }\r\n };\r\n /**\r\n * Fit the layout to the total size required by the widgets.\r\n */\r\n StackedLayout.prototype._fit = function () {\r\n // Set up the computed minimum size.\r\n var minW = 0;\r\n var minH = 0;\r\n // Update the computed minimum size.\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n // Fetch the item.\r\n var item = this._items[i];\r\n // Ignore hidden items.\r\n if (item.isHidden) {\r\n continue;\r\n }\r\n // Update the size limits for the item.\r\n item.fit();\r\n // Update the computed minimum size.\r\n minW = Math.max(minW, item.minWidth);\r\n minH = Math.max(minH, item.minHeight);\r\n }\r\n // Update the box sizing and add it to the computed min size.\r\n var box = this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n minW += box.horizontalSum;\r\n minH += box.verticalSum;\r\n // Update the parent's min size constraints.\r\n var style = this.parent.node.style;\r\n style.minWidth = minW + \"px\";\r\n style.minHeight = minH + \"px\";\r\n // Set the dirty flag to ensure only a single update occurs.\r\n this._dirty = true;\r\n // Notify the ancestor that it should fit immediately. This may\r\n // cause a resize of the parent, fulfilling the required update.\r\n if (this.parent.parent) {\r\n messaging_1.MessageLoop.sendMessage(this.parent.parent, widget_1.Widget.Msg.FitRequest);\r\n }\r\n // If the dirty flag is still set, the parent was not resized.\r\n // Trigger the required update on the parent widget immediately.\r\n if (this._dirty) {\r\n messaging_1.MessageLoop.sendMessage(this.parent, widget_1.Widget.Msg.UpdateRequest);\r\n }\r\n };\r\n /**\r\n * Update the layout position and size of the widgets.\r\n *\r\n * The parent offset dimensions should be `-1` if unknown.\r\n */\r\n StackedLayout.prototype._update = function (offsetWidth, offsetHeight) {\r\n // Clear the dirty flag to indicate the update occurred.\r\n this._dirty = false;\r\n // Compute the visible item count.\r\n var nVisible = 0;\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n nVisible += +!this._items[i].isHidden;\r\n }\r\n // Bail early if there are no visible items to layout.\r\n if (nVisible === 0) {\r\n return;\r\n }\r\n // Measure the parent if the offset dimensions are unknown.\r\n if (offsetWidth < 0) {\r\n offsetWidth = this.parent.node.offsetWidth;\r\n }\r\n if (offsetHeight < 0) {\r\n offsetHeight = this.parent.node.offsetHeight;\r\n }\r\n // Ensure the parent box sizing data is computed.\r\n if (!this._box) {\r\n this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n }\r\n // Compute the actual layout bounds adjusted for border and padding.\r\n var top = this._box.paddingTop;\r\n var left = this._box.paddingLeft;\r\n var width = offsetWidth - this._box.horizontalSum;\r\n var height = offsetHeight - this._box.verticalSum;\r\n // Update the widget stacking order and layout geometry.\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n // Fetch the item.\r\n var item = this._items[i];\r\n // Ignore hidden items.\r\n if (item.isHidden) {\r\n continue;\r\n }\r\n // Set the z-index for the widget.\r\n item.widget.node.style.zIndex = \"\" + i;\r\n // Update the item geometry.\r\n item.update(left, top, width, height);\r\n }\r\n };\r\n return StackedLayout;\r\n}(panellayout_1.PanelLayout));\r\nexports.StackedLayout = StackedLayout;\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\nvar panel_1 = require(\"./panel\");\r\nvar stackedlayout_1 = require(\"./stackedlayout\");\r\n/**\r\n * A panel where visible widgets are stacked atop one another.\r\n *\r\n * #### Notes\r\n * This class provides a convenience wrapper around a [[StackedLayout]].\r\n */\r\nvar StackedPanel = /** @class */ (function (_super) {\r\n __extends(StackedPanel, _super);\r\n /**\r\n * Construct a new stacked panel.\r\n *\r\n * @param options - The options for initializing the panel.\r\n */\r\n function StackedPanel(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, { layout: Private.createLayout(options) }) || this;\r\n _this._widgetRemoved = new signaling_1.Signal(_this);\r\n _this.addClass('p-StackedPanel');\r\n return _this;\r\n }\r\n Object.defineProperty(StackedPanel.prototype, \"widgetRemoved\", {\r\n /**\r\n * A signal emitted when a widget is removed from a stacked panel.\r\n */\r\n get: function () {\r\n return this._widgetRemoved;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * A message handler invoked on a `'child-added'` message.\r\n */\r\n StackedPanel.prototype.onChildAdded = function (msg) {\r\n msg.child.addClass('p-StackedPanel-child');\r\n };\r\n /**\r\n * A message handler invoked on a `'child-removed'` message.\r\n */\r\n StackedPanel.prototype.onChildRemoved = function (msg) {\r\n msg.child.removeClass('p-StackedPanel-child');\r\n this._widgetRemoved.emit(msg.child);\r\n };\r\n return StackedPanel;\r\n}(panel_1.Panel));\r\nexports.StackedPanel = StackedPanel;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * Create a stacked layout for the given panel options.\r\n */\r\n function createLayout(options) {\r\n return options.layout || new stackedlayout_1.StackedLayout();\r\n }\r\n Private.createLayout = createLayout;\r\n})(Private || (Private = {}));\r\n","\"use strict\";\n/* Apache-Style Software License for ColorBrewer software and ColorBrewer Color\n * Schemes\n *\n * Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State\n * University.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions as source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. The end-user documentation included with the redistribution, if any, must\n * include the following acknowledgment: \"This product includes color\n * specifications and designs developed by Cynthia Brewer\n * (http://colorbrewer.org/).\" Alternately, this acknowledgment may appear in the\n * software itself, if and wherever such third-party acknowledgments normally\n * appear.\n *\n * 4. The name \"ColorBrewer\" must not be used to endorse or promote products\n * derived from this software without prior written permission. For written\n * permission, please contact Cynthia Brewer at cbrewer@psu.edu.\n *\n * 5. Products derived from this software may not be called \"ColorBrewer\", nor\n * may \"ColorBrewer\" appear in their name, without prior written permission of\n * Cynthia Brewer.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// This product includes color specifications and designs developed by Cynthia Brewer (http://colorbrewer.org/).\n// JavaScript specs as packaged in the D3 library (d3js.org). Please see license at http://colorbrewer.org/export/LICENSE.txt\nconst colorbrewer = {\n \"Spectral\": { \"3\": [\"rgb(252,141,89)\", \"rgb(255,255,191)\", \"rgb(153,213,148)\"], \"4\": [\"rgb(215,25,28)\", \"rgb(253,174,97)\", \"rgb(171,221,164)\", \"rgb(43,131,186)\"], \"5\": [\"rgb(215,25,28)\", \"rgb(253,174,97)\", \"rgb(255,255,191)\", \"rgb(171,221,164)\", \"rgb(43,131,186)\"], \"6\": [\"rgb(213,62,79)\", \"rgb(252,141,89)\", \"rgb(254,224,139)\", \"rgb(230,245,152)\", \"rgb(153,213,148)\", \"rgb(50,136,189)\"], \"7\": [\"rgb(213,62,79)\", \"rgb(252,141,89)\", \"rgb(254,224,139)\", \"rgb(255,255,191)\", \"rgb(230,245,152)\", \"rgb(153,213,148)\", \"rgb(50,136,189)\"], \"8\": [\"rgb(213,62,79)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,139)\", \"rgb(230,245,152)\", \"rgb(171,221,164)\", \"rgb(102,194,165)\", \"rgb(50,136,189)\"], \"9\": [\"rgb(213,62,79)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,139)\", \"rgb(255,255,191)\", \"rgb(230,245,152)\", \"rgb(171,221,164)\", \"rgb(102,194,165)\", \"rgb(50,136,189)\"], \"10\": [\"rgb(158,1,66)\", \"rgb(213,62,79)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,139)\", \"rgb(230,245,152)\", \"rgb(171,221,164)\", \"rgb(102,194,165)\", \"rgb(50,136,189)\", \"rgb(94,79,162)\"], \"11\": [\"rgb(158,1,66)\", \"rgb(213,62,79)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,139)\", \"rgb(255,255,191)\", \"rgb(230,245,152)\", \"rgb(171,221,164)\", \"rgb(102,194,165)\", \"rgb(50,136,189)\", \"rgb(94,79,162)\"], \"type\": \"div\" },\n \"RdYlGn\": { \"3\": [\"rgb(252,141,89)\", \"rgb(255,255,191)\", \"rgb(145,207,96)\"], \"4\": [\"rgb(215,25,28)\", \"rgb(253,174,97)\", \"rgb(166,217,106)\", \"rgb(26,150,65)\"], \"5\": [\"rgb(215,25,28)\", \"rgb(253,174,97)\", \"rgb(255,255,191)\", \"rgb(166,217,106)\", \"rgb(26,150,65)\"], \"6\": [\"rgb(215,48,39)\", \"rgb(252,141,89)\", \"rgb(254,224,139)\", \"rgb(217,239,139)\", \"rgb(145,207,96)\", \"rgb(26,152,80)\"], \"7\": [\"rgb(215,48,39)\", \"rgb(252,141,89)\", \"rgb(254,224,139)\", \"rgb(255,255,191)\", \"rgb(217,239,139)\", \"rgb(145,207,96)\", \"rgb(26,152,80)\"], \"8\": [\"rgb(215,48,39)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,139)\", \"rgb(217,239,139)\", \"rgb(166,217,106)\", \"rgb(102,189,99)\", \"rgb(26,152,80)\"], \"9\": [\"rgb(215,48,39)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,139)\", \"rgb(255,255,191)\", \"rgb(217,239,139)\", \"rgb(166,217,106)\", \"rgb(102,189,99)\", \"rgb(26,152,80)\"], \"10\": [\"rgb(165,0,38)\", \"rgb(215,48,39)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,139)\", \"rgb(217,239,139)\", \"rgb(166,217,106)\", \"rgb(102,189,99)\", \"rgb(26,152,80)\", \"rgb(0,104,55)\"], \"11\": [\"rgb(165,0,38)\", \"rgb(215,48,39)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,139)\", \"rgb(255,255,191)\", \"rgb(217,239,139)\", \"rgb(166,217,106)\", \"rgb(102,189,99)\", \"rgb(26,152,80)\", \"rgb(0,104,55)\"], \"type\": \"div\" },\n \"RdBu\": { \"3\": [\"rgb(239,138,98)\", \"rgb(247,247,247)\", \"rgb(103,169,207)\"], \"4\": [\"rgb(202,0,32)\", \"rgb(244,165,130)\", \"rgb(146,197,222)\", \"rgb(5,113,176)\"], \"5\": [\"rgb(202,0,32)\", \"rgb(244,165,130)\", \"rgb(247,247,247)\", \"rgb(146,197,222)\", \"rgb(5,113,176)\"], \"6\": [\"rgb(178,24,43)\", \"rgb(239,138,98)\", \"rgb(253,219,199)\", \"rgb(209,229,240)\", \"rgb(103,169,207)\", \"rgb(33,102,172)\"], \"7\": [\"rgb(178,24,43)\", \"rgb(239,138,98)\", \"rgb(253,219,199)\", \"rgb(247,247,247)\", \"rgb(209,229,240)\", \"rgb(103,169,207)\", \"rgb(33,102,172)\"], \"8\": [\"rgb(178,24,43)\", \"rgb(214,96,77)\", \"rgb(244,165,130)\", \"rgb(253,219,199)\", \"rgb(209,229,240)\", \"rgb(146,197,222)\", \"rgb(67,147,195)\", \"rgb(33,102,172)\"], \"9\": [\"rgb(178,24,43)\", \"rgb(214,96,77)\", \"rgb(244,165,130)\", \"rgb(253,219,199)\", \"rgb(247,247,247)\", \"rgb(209,229,240)\", \"rgb(146,197,222)\", \"rgb(67,147,195)\", \"rgb(33,102,172)\"], \"10\": [\"rgb(103,0,31)\", \"rgb(178,24,43)\", \"rgb(214,96,77)\", \"rgb(244,165,130)\", \"rgb(253,219,199)\", \"rgb(209,229,240)\", \"rgb(146,197,222)\", \"rgb(67,147,195)\", \"rgb(33,102,172)\", \"rgb(5,48,97)\"], \"11\": [\"rgb(103,0,31)\", \"rgb(178,24,43)\", \"rgb(214,96,77)\", \"rgb(244,165,130)\", \"rgb(253,219,199)\", \"rgb(247,247,247)\", \"rgb(209,229,240)\", \"rgb(146,197,222)\", \"rgb(67,147,195)\", \"rgb(33,102,172)\", \"rgb(5,48,97)\"], \"type\": \"div\" },\n \"PiYG\": { \"3\": [\"rgb(233,163,201)\", \"rgb(247,247,247)\", \"rgb(161,215,106)\"], \"4\": [\"rgb(208,28,139)\", \"rgb(241,182,218)\", \"rgb(184,225,134)\", \"rgb(77,172,38)\"], \"5\": [\"rgb(208,28,139)\", \"rgb(241,182,218)\", \"rgb(247,247,247)\", \"rgb(184,225,134)\", \"rgb(77,172,38)\"], \"6\": [\"rgb(197,27,125)\", \"rgb(233,163,201)\", \"rgb(253,224,239)\", \"rgb(230,245,208)\", \"rgb(161,215,106)\", \"rgb(77,146,33)\"], \"7\": [\"rgb(197,27,125)\", \"rgb(233,163,201)\", \"rgb(253,224,239)\", \"rgb(247,247,247)\", \"rgb(230,245,208)\", \"rgb(161,215,106)\", \"rgb(77,146,33)\"], \"8\": [\"rgb(197,27,125)\", \"rgb(222,119,174)\", \"rgb(241,182,218)\", \"rgb(253,224,239)\", \"rgb(230,245,208)\", \"rgb(184,225,134)\", \"rgb(127,188,65)\", \"rgb(77,146,33)\"], \"9\": [\"rgb(197,27,125)\", \"rgb(222,119,174)\", \"rgb(241,182,218)\", \"rgb(253,224,239)\", \"rgb(247,247,247)\", \"rgb(230,245,208)\", \"rgb(184,225,134)\", \"rgb(127,188,65)\", \"rgb(77,146,33)\"], \"10\": [\"rgb(142,1,82)\", \"rgb(197,27,125)\", \"rgb(222,119,174)\", \"rgb(241,182,218)\", \"rgb(253,224,239)\", \"rgb(230,245,208)\", \"rgb(184,225,134)\", \"rgb(127,188,65)\", \"rgb(77,146,33)\", \"rgb(39,100,25)\"], \"11\": [\"rgb(142,1,82)\", \"rgb(197,27,125)\", \"rgb(222,119,174)\", \"rgb(241,182,218)\", \"rgb(253,224,239)\", \"rgb(247,247,247)\", \"rgb(230,245,208)\", \"rgb(184,225,134)\", \"rgb(127,188,65)\", \"rgb(77,146,33)\", \"rgb(39,100,25)\"], \"type\": \"div\" },\n \"PRGn\": { \"3\": [\"rgb(175,141,195)\", \"rgb(247,247,247)\", \"rgb(127,191,123)\"], \"4\": [\"rgb(123,50,148)\", \"rgb(194,165,207)\", \"rgb(166,219,160)\", \"rgb(0,136,55)\"], \"5\": [\"rgb(123,50,148)\", \"rgb(194,165,207)\", \"rgb(247,247,247)\", \"rgb(166,219,160)\", \"rgb(0,136,55)\"], \"6\": [\"rgb(118,42,131)\", \"rgb(175,141,195)\", \"rgb(231,212,232)\", \"rgb(217,240,211)\", \"rgb(127,191,123)\", \"rgb(27,120,55)\"], \"7\": [\"rgb(118,42,131)\", \"rgb(175,141,195)\", \"rgb(231,212,232)\", \"rgb(247,247,247)\", \"rgb(217,240,211)\", \"rgb(127,191,123)\", \"rgb(27,120,55)\"], \"8\": [\"rgb(118,42,131)\", \"rgb(153,112,171)\", \"rgb(194,165,207)\", \"rgb(231,212,232)\", \"rgb(217,240,211)\", \"rgb(166,219,160)\", \"rgb(90,174,97)\", \"rgb(27,120,55)\"], \"9\": [\"rgb(118,42,131)\", \"rgb(153,112,171)\", \"rgb(194,165,207)\", \"rgb(231,212,232)\", \"rgb(247,247,247)\", \"rgb(217,240,211)\", \"rgb(166,219,160)\", \"rgb(90,174,97)\", \"rgb(27,120,55)\"], \"10\": [\"rgb(64,0,75)\", \"rgb(118,42,131)\", \"rgb(153,112,171)\", \"rgb(194,165,207)\", \"rgb(231,212,232)\", \"rgb(217,240,211)\", \"rgb(166,219,160)\", \"rgb(90,174,97)\", \"rgb(27,120,55)\", \"rgb(0,68,27)\"], \"11\": [\"rgb(64,0,75)\", \"rgb(118,42,131)\", \"rgb(153,112,171)\", \"rgb(194,165,207)\", \"rgb(231,212,232)\", \"rgb(247,247,247)\", \"rgb(217,240,211)\", \"rgb(166,219,160)\", \"rgb(90,174,97)\", \"rgb(27,120,55)\", \"rgb(0,68,27)\"], \"type\": \"div\" },\n \"RdYlBu\": { \"3\": [\"rgb(252,141,89)\", \"rgb(255,255,191)\", \"rgb(145,191,219)\"], \"4\": [\"rgb(215,25,28)\", \"rgb(253,174,97)\", \"rgb(171,217,233)\", \"rgb(44,123,182)\"], \"5\": [\"rgb(215,25,28)\", \"rgb(253,174,97)\", \"rgb(255,255,191)\", \"rgb(171,217,233)\", \"rgb(44,123,182)\"], \"6\": [\"rgb(215,48,39)\", \"rgb(252,141,89)\", \"rgb(254,224,144)\", \"rgb(224,243,248)\", \"rgb(145,191,219)\", \"rgb(69,117,180)\"], \"7\": [\"rgb(215,48,39)\", \"rgb(252,141,89)\", \"rgb(254,224,144)\", \"rgb(255,255,191)\", \"rgb(224,243,248)\", \"rgb(145,191,219)\", \"rgb(69,117,180)\"], \"8\": [\"rgb(215,48,39)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,144)\", \"rgb(224,243,248)\", \"rgb(171,217,233)\", \"rgb(116,173,209)\", \"rgb(69,117,180)\"], \"9\": [\"rgb(215,48,39)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,144)\", \"rgb(255,255,191)\", \"rgb(224,243,248)\", \"rgb(171,217,233)\", \"rgb(116,173,209)\", \"rgb(69,117,180)\"], \"10\": [\"rgb(165,0,38)\", \"rgb(215,48,39)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,144)\", \"rgb(224,243,248)\", \"rgb(171,217,233)\", \"rgb(116,173,209)\", \"rgb(69,117,180)\", \"rgb(49,54,149)\"], \"11\": [\"rgb(165,0,38)\", \"rgb(215,48,39)\", \"rgb(244,109,67)\", \"rgb(253,174,97)\", \"rgb(254,224,144)\", \"rgb(255,255,191)\", \"rgb(224,243,248)\", \"rgb(171,217,233)\", \"rgb(116,173,209)\", \"rgb(69,117,180)\", \"rgb(49,54,149)\"], \"type\": \"div\" },\n \"BrBG\": { \"3\": [\"rgb(216,179,101)\", \"rgb(245,245,245)\", \"rgb(90,180,172)\"], \"4\": [\"rgb(166,97,26)\", \"rgb(223,194,125)\", \"rgb(128,205,193)\", \"rgb(1,133,113)\"], \"5\": [\"rgb(166,97,26)\", \"rgb(223,194,125)\", \"rgb(245,245,245)\", \"rgb(128,205,193)\", \"rgb(1,133,113)\"], \"6\": [\"rgb(140,81,10)\", \"rgb(216,179,101)\", \"rgb(246,232,195)\", \"rgb(199,234,229)\", \"rgb(90,180,172)\", \"rgb(1,102,94)\"], \"7\": [\"rgb(140,81,10)\", \"rgb(216,179,101)\", \"rgb(246,232,195)\", \"rgb(245,245,245)\", \"rgb(199,234,229)\", \"rgb(90,180,172)\", \"rgb(1,102,94)\"], \"8\": [\"rgb(140,81,10)\", \"rgb(191,129,45)\", \"rgb(223,194,125)\", \"rgb(246,232,195)\", \"rgb(199,234,229)\", \"rgb(128,205,193)\", \"rgb(53,151,143)\", \"rgb(1,102,94)\"], \"9\": [\"rgb(140,81,10)\", \"rgb(191,129,45)\", \"rgb(223,194,125)\", \"rgb(246,232,195)\", \"rgb(245,245,245)\", \"rgb(199,234,229)\", \"rgb(128,205,193)\", \"rgb(53,151,143)\", \"rgb(1,102,94)\"], \"10\": [\"rgb(84,48,5)\", \"rgb(140,81,10)\", \"rgb(191,129,45)\", \"rgb(223,194,125)\", \"rgb(246,232,195)\", \"rgb(199,234,229)\", \"rgb(128,205,193)\", \"rgb(53,151,143)\", \"rgb(1,102,94)\", \"rgb(0,60,48)\"], \"11\": [\"rgb(84,48,5)\", \"rgb(140,81,10)\", \"rgb(191,129,45)\", \"rgb(223,194,125)\", \"rgb(246,232,195)\", \"rgb(245,245,245)\", \"rgb(199,234,229)\", \"rgb(128,205,193)\", \"rgb(53,151,143)\", \"rgb(1,102,94)\", \"rgb(0,60,48)\"], \"type\": \"div\" },\n \"RdGy\": { \"3\": [\"rgb(239,138,98)\", \"rgb(255,255,255)\", \"rgb(153,153,153)\"], \"4\": [\"rgb(202,0,32)\", \"rgb(244,165,130)\", \"rgb(186,186,186)\", \"rgb(64,64,64)\"], \"5\": [\"rgb(202,0,32)\", \"rgb(244,165,130)\", \"rgb(255,255,255)\", \"rgb(186,186,186)\", \"rgb(64,64,64)\"], \"6\": [\"rgb(178,24,43)\", \"rgb(239,138,98)\", \"rgb(253,219,199)\", \"rgb(224,224,224)\", \"rgb(153,153,153)\", \"rgb(77,77,77)\"], \"7\": [\"rgb(178,24,43)\", \"rgb(239,138,98)\", \"rgb(253,219,199)\", \"rgb(255,255,255)\", \"rgb(224,224,224)\", \"rgb(153,153,153)\", \"rgb(77,77,77)\"], \"8\": [\"rgb(178,24,43)\", \"rgb(214,96,77)\", \"rgb(244,165,130)\", \"rgb(253,219,199)\", \"rgb(224,224,224)\", \"rgb(186,186,186)\", \"rgb(135,135,135)\", \"rgb(77,77,77)\"], \"9\": [\"rgb(178,24,43)\", \"rgb(214,96,77)\", \"rgb(244,165,130)\", \"rgb(253,219,199)\", \"rgb(255,255,255)\", \"rgb(224,224,224)\", \"rgb(186,186,186)\", \"rgb(135,135,135)\", \"rgb(77,77,77)\"], \"10\": [\"rgb(103,0,31)\", \"rgb(178,24,43)\", \"rgb(214,96,77)\", \"rgb(244,165,130)\", \"rgb(253,219,199)\", \"rgb(224,224,224)\", \"rgb(186,186,186)\", \"rgb(135,135,135)\", \"rgb(77,77,77)\", \"rgb(26,26,26)\"], \"11\": [\"rgb(103,0,31)\", \"rgb(178,24,43)\", \"rgb(214,96,77)\", \"rgb(244,165,130)\", \"rgb(253,219,199)\", \"rgb(255,255,255)\", \"rgb(224,224,224)\", \"rgb(186,186,186)\", \"rgb(135,135,135)\", \"rgb(77,77,77)\", \"rgb(26,26,26)\"], \"type\": \"div\" },\n \"PuOr\": { \"3\": [\"rgb(241,163,64)\", \"rgb(247,247,247)\", \"rgb(153,142,195)\"], \"4\": [\"rgb(230,97,1)\", \"rgb(253,184,99)\", \"rgb(178,171,210)\", \"rgb(94,60,153)\"], \"5\": [\"rgb(230,97,1)\", \"rgb(253,184,99)\", \"rgb(247,247,247)\", \"rgb(178,171,210)\", \"rgb(94,60,153)\"], \"6\": [\"rgb(179,88,6)\", \"rgb(241,163,64)\", \"rgb(254,224,182)\", \"rgb(216,218,235)\", \"rgb(153,142,195)\", \"rgb(84,39,136)\"], \"7\": [\"rgb(179,88,6)\", \"rgb(241,163,64)\", \"rgb(254,224,182)\", \"rgb(247,247,247)\", \"rgb(216,218,235)\", \"rgb(153,142,195)\", \"rgb(84,39,136)\"], \"8\": [\"rgb(179,88,6)\", \"rgb(224,130,20)\", \"rgb(253,184,99)\", \"rgb(254,224,182)\", \"rgb(216,218,235)\", \"rgb(178,171,210)\", \"rgb(128,115,172)\", \"rgb(84,39,136)\"], \"9\": [\"rgb(179,88,6)\", \"rgb(224,130,20)\", \"rgb(253,184,99)\", \"rgb(254,224,182)\", \"rgb(247,247,247)\", \"rgb(216,218,235)\", \"rgb(178,171,210)\", \"rgb(128,115,172)\", \"rgb(84,39,136)\"], \"10\": [\"rgb(127,59,8)\", \"rgb(179,88,6)\", \"rgb(224,130,20)\", \"rgb(253,184,99)\", \"rgb(254,224,182)\", \"rgb(216,218,235)\", \"rgb(178,171,210)\", \"rgb(128,115,172)\", \"rgb(84,39,136)\", \"rgb(45,0,75)\"], \"11\": [\"rgb(127,59,8)\", \"rgb(179,88,6)\", \"rgb(224,130,20)\", \"rgb(253,184,99)\", \"rgb(254,224,182)\", \"rgb(247,247,247)\", \"rgb(216,218,235)\", \"rgb(178,171,210)\", \"rgb(128,115,172)\", \"rgb(84,39,136)\", \"rgb(45,0,75)\"], \"type\": \"div\" },\n \"Set2\": { \"3\": [\"rgb(102,194,165)\", \"rgb(252,141,98)\", \"rgb(141,160,203)\"], \"4\": [\"rgb(102,194,165)\", \"rgb(252,141,98)\", \"rgb(141,160,203)\", \"rgb(231,138,195)\"], \"5\": [\"rgb(102,194,165)\", \"rgb(252,141,98)\", \"rgb(141,160,203)\", \"rgb(231,138,195)\", \"rgb(166,216,84)\"], \"6\": [\"rgb(102,194,165)\", \"rgb(252,141,98)\", \"rgb(141,160,203)\", \"rgb(231,138,195)\", \"rgb(166,216,84)\", \"rgb(255,217,47)\"], \"7\": [\"rgb(102,194,165)\", \"rgb(252,141,98)\", \"rgb(141,160,203)\", \"rgb(231,138,195)\", \"rgb(166,216,84)\", \"rgb(255,217,47)\", \"rgb(229,196,148)\"], \"8\": [\"rgb(102,194,165)\", \"rgb(252,141,98)\", \"rgb(141,160,203)\", \"rgb(231,138,195)\", \"rgb(166,216,84)\", \"rgb(255,217,47)\", \"rgb(229,196,148)\", \"rgb(179,179,179)\"], \"type\": \"qual\" },\n \"Accent\": { \"3\": [\"rgb(127,201,127)\", \"rgb(190,174,212)\", \"rgb(253,192,134)\"], \"4\": [\"rgb(127,201,127)\", \"rgb(190,174,212)\", \"rgb(253,192,134)\", \"rgb(255,255,153)\"], \"5\": [\"rgb(127,201,127)\", \"rgb(190,174,212)\", \"rgb(253,192,134)\", \"rgb(255,255,153)\", \"rgb(56,108,176)\"], \"6\": [\"rgb(127,201,127)\", \"rgb(190,174,212)\", \"rgb(253,192,134)\", \"rgb(255,255,153)\", \"rgb(56,108,176)\", \"rgb(240,2,127)\"], \"7\": [\"rgb(127,201,127)\", \"rgb(190,174,212)\", \"rgb(253,192,134)\", \"rgb(255,255,153)\", \"rgb(56,108,176)\", \"rgb(240,2,127)\", \"rgb(191,91,23)\"], \"8\": [\"rgb(127,201,127)\", \"rgb(190,174,212)\", \"rgb(253,192,134)\", \"rgb(255,255,153)\", \"rgb(56,108,176)\", \"rgb(240,2,127)\", \"rgb(191,91,23)\", \"rgb(102,102,102)\"], \"type\": \"qual\" },\n \"Set1\": { \"3\": [\"rgb(228,26,28)\", \"rgb(55,126,184)\", \"rgb(77,175,74)\"], \"4\": [\"rgb(228,26,28)\", \"rgb(55,126,184)\", \"rgb(77,175,74)\", \"rgb(152,78,163)\"], \"5\": [\"rgb(228,26,28)\", \"rgb(55,126,184)\", \"rgb(77,175,74)\", \"rgb(152,78,163)\", \"rgb(255,127,0)\"], \"6\": [\"rgb(228,26,28)\", \"rgb(55,126,184)\", \"rgb(77,175,74)\", \"rgb(152,78,163)\", \"rgb(255,127,0)\", \"rgb(255,255,51)\"], \"7\": [\"rgb(228,26,28)\", \"rgb(55,126,184)\", \"rgb(77,175,74)\", \"rgb(152,78,163)\", \"rgb(255,127,0)\", \"rgb(255,255,51)\", \"rgb(166,86,40)\"], \"8\": [\"rgb(228,26,28)\", \"rgb(55,126,184)\", \"rgb(77,175,74)\", \"rgb(152,78,163)\", \"rgb(255,127,0)\", \"rgb(255,255,51)\", \"rgb(166,86,40)\", \"rgb(247,129,191)\"], \"9\": [\"rgb(228,26,28)\", \"rgb(55,126,184)\", \"rgb(77,175,74)\", \"rgb(152,78,163)\", \"rgb(255,127,0)\", \"rgb(255,255,51)\", \"rgb(166,86,40)\", \"rgb(247,129,191)\", \"rgb(153,153,153)\"], \"type\": \"qual\" },\n \"Set3\": { \"3\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\"], \"4\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\", \"rgb(251,128,114)\"], \"5\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\", \"rgb(251,128,114)\", \"rgb(128,177,211)\"], \"6\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\", \"rgb(251,128,114)\", \"rgb(128,177,211)\", \"rgb(253,180,98)\"], \"7\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\", \"rgb(251,128,114)\", \"rgb(128,177,211)\", \"rgb(253,180,98)\", \"rgb(179,222,105)\"], \"8\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\", \"rgb(251,128,114)\", \"rgb(128,177,211)\", \"rgb(253,180,98)\", \"rgb(179,222,105)\", \"rgb(252,205,229)\"], \"9\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\", \"rgb(251,128,114)\", \"rgb(128,177,211)\", \"rgb(253,180,98)\", \"rgb(179,222,105)\", \"rgb(252,205,229)\", \"rgb(217,217,217)\"], \"10\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\", \"rgb(251,128,114)\", \"rgb(128,177,211)\", \"rgb(253,180,98)\", \"rgb(179,222,105)\", \"rgb(252,205,229)\", \"rgb(217,217,217)\", \"rgb(188,128,189)\"], \"11\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\", \"rgb(251,128,114)\", \"rgb(128,177,211)\", \"rgb(253,180,98)\", \"rgb(179,222,105)\", \"rgb(252,205,229)\", \"rgb(217,217,217)\", \"rgb(188,128,189)\", \"rgb(204,235,197)\"], \"12\": [\"rgb(141,211,199)\", \"rgb(255,255,179)\", \"rgb(190,186,218)\", \"rgb(251,128,114)\", \"rgb(128,177,211)\", \"rgb(253,180,98)\", \"rgb(179,222,105)\", \"rgb(252,205,229)\", \"rgb(217,217,217)\", \"rgb(188,128,189)\", \"rgb(204,235,197)\", \"rgb(255,237,111)\"], \"type\": \"qual\" },\n \"Dark2\": { \"3\": [\"rgb(27,158,119)\", \"rgb(217,95,2)\", \"rgb(117,112,179)\"], \"4\": [\"rgb(27,158,119)\", \"rgb(217,95,2)\", \"rgb(117,112,179)\", \"rgb(231,41,138)\"], \"5\": [\"rgb(27,158,119)\", \"rgb(217,95,2)\", \"rgb(117,112,179)\", \"rgb(231,41,138)\", \"rgb(102,166,30)\"], \"6\": [\"rgb(27,158,119)\", \"rgb(217,95,2)\", \"rgb(117,112,179)\", \"rgb(231,41,138)\", \"rgb(102,166,30)\", \"rgb(230,171,2)\"], \"7\": [\"rgb(27,158,119)\", \"rgb(217,95,2)\", \"rgb(117,112,179)\", \"rgb(231,41,138)\", \"rgb(102,166,30)\", \"rgb(230,171,2)\", \"rgb(166,118,29)\"], \"8\": [\"rgb(27,158,119)\", \"rgb(217,95,2)\", \"rgb(117,112,179)\", \"rgb(231,41,138)\", \"rgb(102,166,30)\", \"rgb(230,171,2)\", \"rgb(166,118,29)\", \"rgb(102,102,102)\"], \"type\": \"qual\" },\n \"Paired\": { \"3\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\"], \"4\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\", \"rgb(51,160,44)\"], \"5\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\", \"rgb(51,160,44)\", \"rgb(251,154,153)\"], \"6\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\", \"rgb(51,160,44)\", \"rgb(251,154,153)\", \"rgb(227,26,28)\"], \"7\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\", \"rgb(51,160,44)\", \"rgb(251,154,153)\", \"rgb(227,26,28)\", \"rgb(253,191,111)\"], \"8\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\", \"rgb(51,160,44)\", \"rgb(251,154,153)\", \"rgb(227,26,28)\", \"rgb(253,191,111)\", \"rgb(255,127,0)\"], \"9\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\", \"rgb(51,160,44)\", \"rgb(251,154,153)\", \"rgb(227,26,28)\", \"rgb(253,191,111)\", \"rgb(255,127,0)\", \"rgb(202,178,214)\"], \"10\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\", \"rgb(51,160,44)\", \"rgb(251,154,153)\", \"rgb(227,26,28)\", \"rgb(253,191,111)\", \"rgb(255,127,0)\", \"rgb(202,178,214)\", \"rgb(106,61,154)\"], \"11\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\", \"rgb(51,160,44)\", \"rgb(251,154,153)\", \"rgb(227,26,28)\", \"rgb(253,191,111)\", \"rgb(255,127,0)\", \"rgb(202,178,214)\", \"rgb(106,61,154)\", \"rgb(255,255,153)\"], \"12\": [\"rgb(166,206,227)\", \"rgb(31,120,180)\", \"rgb(178,223,138)\", \"rgb(51,160,44)\", \"rgb(251,154,153)\", \"rgb(227,26,28)\", \"rgb(253,191,111)\", \"rgb(255,127,0)\", \"rgb(202,178,214)\", \"rgb(106,61,154)\", \"rgb(255,255,153)\", \"rgb(177,89,40)\"], \"type\": \"qual\" },\n \"Pastel2\": { \"3\": [\"rgb(179,226,205)\", \"rgb(253,205,172)\", \"rgb(203,213,232)\"], \"4\": [\"rgb(179,226,205)\", \"rgb(253,205,172)\", \"rgb(203,213,232)\", \"rgb(244,202,228)\"], \"5\": [\"rgb(179,226,205)\", \"rgb(253,205,172)\", \"rgb(203,213,232)\", \"rgb(244,202,228)\", \"rgb(230,245,201)\"], \"6\": [\"rgb(179,226,205)\", \"rgb(253,205,172)\", \"rgb(203,213,232)\", \"rgb(244,202,228)\", \"rgb(230,245,201)\", \"rgb(255,242,174)\"], \"7\": [\"rgb(179,226,205)\", \"rgb(253,205,172)\", \"rgb(203,213,232)\", \"rgb(244,202,228)\", \"rgb(230,245,201)\", \"rgb(255,242,174)\", \"rgb(241,226,204)\"], \"8\": [\"rgb(179,226,205)\", \"rgb(253,205,172)\", \"rgb(203,213,232)\", \"rgb(244,202,228)\", \"rgb(230,245,201)\", \"rgb(255,242,174)\", \"rgb(241,226,204)\", \"rgb(204,204,204)\"], \"type\": \"qual\" },\n \"Pastel1\": { \"3\": [\"rgb(251,180,174)\", \"rgb(179,205,227)\", \"rgb(204,235,197)\"], \"4\": [\"rgb(251,180,174)\", \"rgb(179,205,227)\", \"rgb(204,235,197)\", \"rgb(222,203,228)\"], \"5\": [\"rgb(251,180,174)\", \"rgb(179,205,227)\", \"rgb(204,235,197)\", \"rgb(222,203,228)\", \"rgb(254,217,166)\"], \"6\": [\"rgb(251,180,174)\", \"rgb(179,205,227)\", \"rgb(204,235,197)\", \"rgb(222,203,228)\", \"rgb(254,217,166)\", \"rgb(255,255,204)\"], \"7\": [\"rgb(251,180,174)\", \"rgb(179,205,227)\", \"rgb(204,235,197)\", \"rgb(222,203,228)\", \"rgb(254,217,166)\", \"rgb(255,255,204)\", \"rgb(229,216,189)\"], \"8\": [\"rgb(251,180,174)\", \"rgb(179,205,227)\", \"rgb(204,235,197)\", \"rgb(222,203,228)\", \"rgb(254,217,166)\", \"rgb(255,255,204)\", \"rgb(229,216,189)\", \"rgb(253,218,236)\"], \"9\": [\"rgb(251,180,174)\", \"rgb(179,205,227)\", \"rgb(204,235,197)\", \"rgb(222,203,228)\", \"rgb(254,217,166)\", \"rgb(255,255,204)\", \"rgb(229,216,189)\", \"rgb(253,218,236)\", \"rgb(242,242,242)\"], \"type\": \"qual\" },\n \"OrRd\": { \"3\": [\"rgb(254,232,200)\", \"rgb(253,187,132)\", \"rgb(227,74,51)\"], \"4\": [\"rgb(254,240,217)\", \"rgb(253,204,138)\", \"rgb(252,141,89)\", \"rgb(215,48,31)\"], \"5\": [\"rgb(254,240,217)\", \"rgb(253,204,138)\", \"rgb(252,141,89)\", \"rgb(227,74,51)\", \"rgb(179,0,0)\"], \"6\": [\"rgb(254,240,217)\", \"rgb(253,212,158)\", \"rgb(253,187,132)\", \"rgb(252,141,89)\", \"rgb(227,74,51)\", \"rgb(179,0,0)\"], \"7\": [\"rgb(254,240,217)\", \"rgb(253,212,158)\", \"rgb(253,187,132)\", \"rgb(252,141,89)\", \"rgb(239,101,72)\", \"rgb(215,48,31)\", \"rgb(153,0,0)\"], \"8\": [\"rgb(255,247,236)\", \"rgb(254,232,200)\", \"rgb(253,212,158)\", \"rgb(253,187,132)\", \"rgb(252,141,89)\", \"rgb(239,101,72)\", \"rgb(215,48,31)\", \"rgb(153,0,0)\"], \"9\": [\"rgb(255,247,236)\", \"rgb(254,232,200)\", \"rgb(253,212,158)\", \"rgb(253,187,132)\", \"rgb(252,141,89)\", \"rgb(239,101,72)\", \"rgb(215,48,31)\", \"rgb(179,0,0)\", \"rgb(127,0,0)\"], \"type\": \"seq\" },\n \"PuBu\": { \"3\": [\"rgb(236,231,242)\", \"rgb(166,189,219)\", \"rgb(43,140,190)\"], \"4\": [\"rgb(241,238,246)\", \"rgb(189,201,225)\", \"rgb(116,169,207)\", \"rgb(5,112,176)\"], \"5\": [\"rgb(241,238,246)\", \"rgb(189,201,225)\", \"rgb(116,169,207)\", \"rgb(43,140,190)\", \"rgb(4,90,141)\"], \"6\": [\"rgb(241,238,246)\", \"rgb(208,209,230)\", \"rgb(166,189,219)\", \"rgb(116,169,207)\", \"rgb(43,140,190)\", \"rgb(4,90,141)\"], \"7\": [\"rgb(241,238,246)\", \"rgb(208,209,230)\", \"rgb(166,189,219)\", \"rgb(116,169,207)\", \"rgb(54,144,192)\", \"rgb(5,112,176)\", \"rgb(3,78,123)\"], \"8\": [\"rgb(255,247,251)\", \"rgb(236,231,242)\", \"rgb(208,209,230)\", \"rgb(166,189,219)\", \"rgb(116,169,207)\", \"rgb(54,144,192)\", \"rgb(5,112,176)\", \"rgb(3,78,123)\"], \"9\": [\"rgb(255,247,251)\", \"rgb(236,231,242)\", \"rgb(208,209,230)\", \"rgb(166,189,219)\", \"rgb(116,169,207)\", \"rgb(54,144,192)\", \"rgb(5,112,176)\", \"rgb(4,90,141)\", \"rgb(2,56,88)\"], \"type\": \"seq\" },\n \"BuPu\": { \"3\": [\"rgb(224,236,244)\", \"rgb(158,188,218)\", \"rgb(136,86,167)\"], \"4\": [\"rgb(237,248,251)\", \"rgb(179,205,227)\", \"rgb(140,150,198)\", \"rgb(136,65,157)\"], \"5\": [\"rgb(237,248,251)\", \"rgb(179,205,227)\", \"rgb(140,150,198)\", \"rgb(136,86,167)\", \"rgb(129,15,124)\"], \"6\": [\"rgb(237,248,251)\", \"rgb(191,211,230)\", \"rgb(158,188,218)\", \"rgb(140,150,198)\", \"rgb(136,86,167)\", \"rgb(129,15,124)\"], \"7\": [\"rgb(237,248,251)\", \"rgb(191,211,230)\", \"rgb(158,188,218)\", \"rgb(140,150,198)\", \"rgb(140,107,177)\", \"rgb(136,65,157)\", \"rgb(110,1,107)\"], \"8\": [\"rgb(247,252,253)\", \"rgb(224,236,244)\", \"rgb(191,211,230)\", \"rgb(158,188,218)\", \"rgb(140,150,198)\", \"rgb(140,107,177)\", \"rgb(136,65,157)\", \"rgb(110,1,107)\"], \"9\": [\"rgb(247,252,253)\", \"rgb(224,236,244)\", \"rgb(191,211,230)\", \"rgb(158,188,218)\", \"rgb(140,150,198)\", \"rgb(140,107,177)\", \"rgb(136,65,157)\", \"rgb(129,15,124)\", \"rgb(77,0,75)\"], \"type\": \"seq\" },\n \"Oranges\": { \"3\": [\"rgb(254,230,206)\", \"rgb(253,174,107)\", \"rgb(230,85,13)\"], \"4\": [\"rgb(254,237,222)\", \"rgb(253,190,133)\", \"rgb(253,141,60)\", \"rgb(217,71,1)\"], \"5\": [\"rgb(254,237,222)\", \"rgb(253,190,133)\", \"rgb(253,141,60)\", \"rgb(230,85,13)\", \"rgb(166,54,3)\"], \"6\": [\"rgb(254,237,222)\", \"rgb(253,208,162)\", \"rgb(253,174,107)\", \"rgb(253,141,60)\", \"rgb(230,85,13)\", \"rgb(166,54,3)\"], \"7\": [\"rgb(254,237,222)\", \"rgb(253,208,162)\", \"rgb(253,174,107)\", \"rgb(253,141,60)\", \"rgb(241,105,19)\", \"rgb(217,72,1)\", \"rgb(140,45,4)\"], \"8\": [\"rgb(255,245,235)\", \"rgb(254,230,206)\", \"rgb(253,208,162)\", \"rgb(253,174,107)\", \"rgb(253,141,60)\", \"rgb(241,105,19)\", \"rgb(217,72,1)\", \"rgb(140,45,4)\"], \"9\": [\"rgb(255,245,235)\", \"rgb(254,230,206)\", \"rgb(253,208,162)\", \"rgb(253,174,107)\", \"rgb(253,141,60)\", \"rgb(241,105,19)\", \"rgb(217,72,1)\", \"rgb(166,54,3)\", \"rgb(127,39,4)\"], \"type\": \"seq\" },\n \"BuGn\": { \"3\": [\"rgb(229,245,249)\", \"rgb(153,216,201)\", \"rgb(44,162,95)\"], \"4\": [\"rgb(237,248,251)\", \"rgb(178,226,226)\", \"rgb(102,194,164)\", \"rgb(35,139,69)\"], \"5\": [\"rgb(237,248,251)\", \"rgb(178,226,226)\", \"rgb(102,194,164)\", \"rgb(44,162,95)\", \"rgb(0,109,44)\"], \"6\": [\"rgb(237,248,251)\", \"rgb(204,236,230)\", \"rgb(153,216,201)\", \"rgb(102,194,164)\", \"rgb(44,162,95)\", \"rgb(0,109,44)\"], \"7\": [\"rgb(237,248,251)\", \"rgb(204,236,230)\", \"rgb(153,216,201)\", \"rgb(102,194,164)\", \"rgb(65,174,118)\", \"rgb(35,139,69)\", \"rgb(0,88,36)\"], \"8\": [\"rgb(247,252,253)\", \"rgb(229,245,249)\", \"rgb(204,236,230)\", \"rgb(153,216,201)\", \"rgb(102,194,164)\", \"rgb(65,174,118)\", \"rgb(35,139,69)\", \"rgb(0,88,36)\"], \"9\": [\"rgb(247,252,253)\", \"rgb(229,245,249)\", \"rgb(204,236,230)\", \"rgb(153,216,201)\", \"rgb(102,194,164)\", \"rgb(65,174,118)\", \"rgb(35,139,69)\", \"rgb(0,109,44)\", \"rgb(0,68,27)\"], \"type\": \"seq\" },\n \"YlOrBr\": { \"3\": [\"rgb(255,247,188)\", \"rgb(254,196,79)\", \"rgb(217,95,14)\"], \"4\": [\"rgb(255,255,212)\", \"rgb(254,217,142)\", \"rgb(254,153,41)\", \"rgb(204,76,2)\"], \"5\": [\"rgb(255,255,212)\", \"rgb(254,217,142)\", \"rgb(254,153,41)\", \"rgb(217,95,14)\", \"rgb(153,52,4)\"], \"6\": [\"rgb(255,255,212)\", \"rgb(254,227,145)\", \"rgb(254,196,79)\", \"rgb(254,153,41)\", \"rgb(217,95,14)\", \"rgb(153,52,4)\"], \"7\": [\"rgb(255,255,212)\", \"rgb(254,227,145)\", \"rgb(254,196,79)\", \"rgb(254,153,41)\", \"rgb(236,112,20)\", \"rgb(204,76,2)\", \"rgb(140,45,4)\"], \"8\": [\"rgb(255,255,229)\", \"rgb(255,247,188)\", \"rgb(254,227,145)\", \"rgb(254,196,79)\", \"rgb(254,153,41)\", \"rgb(236,112,20)\", \"rgb(204,76,2)\", \"rgb(140,45,4)\"], \"9\": [\"rgb(255,255,229)\", \"rgb(255,247,188)\", \"rgb(254,227,145)\", \"rgb(254,196,79)\", \"rgb(254,153,41)\", \"rgb(236,112,20)\", \"rgb(204,76,2)\", \"rgb(153,52,4)\", \"rgb(102,37,6)\"], \"type\": \"seq\" },\n \"YlGn\": { \"3\": [\"rgb(247,252,185)\", \"rgb(173,221,142)\", \"rgb(49,163,84)\"], \"4\": [\"rgb(255,255,204)\", \"rgb(194,230,153)\", \"rgb(120,198,121)\", \"rgb(35,132,67)\"], \"5\": [\"rgb(255,255,204)\", \"rgb(194,230,153)\", \"rgb(120,198,121)\", \"rgb(49,163,84)\", \"rgb(0,104,55)\"], \"6\": [\"rgb(255,255,204)\", \"rgb(217,240,163)\", \"rgb(173,221,142)\", \"rgb(120,198,121)\", \"rgb(49,163,84)\", \"rgb(0,104,55)\"], \"7\": [\"rgb(255,255,204)\", \"rgb(217,240,163)\", \"rgb(173,221,142)\", \"rgb(120,198,121)\", \"rgb(65,171,93)\", \"rgb(35,132,67)\", \"rgb(0,90,50)\"], \"8\": [\"rgb(255,255,229)\", \"rgb(247,252,185)\", \"rgb(217,240,163)\", \"rgb(173,221,142)\", \"rgb(120,198,121)\", \"rgb(65,171,93)\", \"rgb(35,132,67)\", \"rgb(0,90,50)\"], \"9\": [\"rgb(255,255,229)\", \"rgb(247,252,185)\", \"rgb(217,240,163)\", \"rgb(173,221,142)\", \"rgb(120,198,121)\", \"rgb(65,171,93)\", \"rgb(35,132,67)\", \"rgb(0,104,55)\", \"rgb(0,69,41)\"], \"type\": \"seq\" },\n \"Reds\": { \"3\": [\"rgb(254,224,210)\", \"rgb(252,146,114)\", \"rgb(222,45,38)\"], \"4\": [\"rgb(254,229,217)\", \"rgb(252,174,145)\", \"rgb(251,106,74)\", \"rgb(203,24,29)\"], \"5\": [\"rgb(254,229,217)\", \"rgb(252,174,145)\", \"rgb(251,106,74)\", \"rgb(222,45,38)\", \"rgb(165,15,21)\"], \"6\": [\"rgb(254,229,217)\", \"rgb(252,187,161)\", \"rgb(252,146,114)\", \"rgb(251,106,74)\", \"rgb(222,45,38)\", \"rgb(165,15,21)\"], \"7\": [\"rgb(254,229,217)\", \"rgb(252,187,161)\", \"rgb(252,146,114)\", \"rgb(251,106,74)\", \"rgb(239,59,44)\", \"rgb(203,24,29)\", \"rgb(153,0,13)\"], \"8\": [\"rgb(255,245,240)\", \"rgb(254,224,210)\", \"rgb(252,187,161)\", \"rgb(252,146,114)\", \"rgb(251,106,74)\", \"rgb(239,59,44)\", \"rgb(203,24,29)\", \"rgb(153,0,13)\"], \"9\": [\"rgb(255,245,240)\", \"rgb(254,224,210)\", \"rgb(252,187,161)\", \"rgb(252,146,114)\", \"rgb(251,106,74)\", \"rgb(239,59,44)\", \"rgb(203,24,29)\", \"rgb(165,15,21)\", \"rgb(103,0,13)\"], \"type\": \"seq\" },\n \"RdPu\": { \"3\": [\"rgb(253,224,221)\", \"rgb(250,159,181)\", \"rgb(197,27,138)\"], \"4\": [\"rgb(254,235,226)\", \"rgb(251,180,185)\", \"rgb(247,104,161)\", \"rgb(174,1,126)\"], \"5\": [\"rgb(254,235,226)\", \"rgb(251,180,185)\", \"rgb(247,104,161)\", \"rgb(197,27,138)\", \"rgb(122,1,119)\"], \"6\": [\"rgb(254,235,226)\", \"rgb(252,197,192)\", \"rgb(250,159,181)\", \"rgb(247,104,161)\", \"rgb(197,27,138)\", \"rgb(122,1,119)\"], \"7\": [\"rgb(254,235,226)\", \"rgb(252,197,192)\", \"rgb(250,159,181)\", \"rgb(247,104,161)\", \"rgb(221,52,151)\", \"rgb(174,1,126)\", \"rgb(122,1,119)\"], \"8\": [\"rgb(255,247,243)\", \"rgb(253,224,221)\", \"rgb(252,197,192)\", \"rgb(250,159,181)\", \"rgb(247,104,161)\", \"rgb(221,52,151)\", \"rgb(174,1,126)\", \"rgb(122,1,119)\"], \"9\": [\"rgb(255,247,243)\", \"rgb(253,224,221)\", \"rgb(252,197,192)\", \"rgb(250,159,181)\", \"rgb(247,104,161)\", \"rgb(221,52,151)\", \"rgb(174,1,126)\", \"rgb(122,1,119)\", \"rgb(73,0,106)\"], \"type\": \"seq\" },\n \"Greens\": { \"3\": [\"rgb(229,245,224)\", \"rgb(161,217,155)\", \"rgb(49,163,84)\"], \"4\": [\"rgb(237,248,233)\", \"rgb(186,228,179)\", \"rgb(116,196,118)\", \"rgb(35,139,69)\"], \"5\": [\"rgb(237,248,233)\", \"rgb(186,228,179)\", \"rgb(116,196,118)\", \"rgb(49,163,84)\", \"rgb(0,109,44)\"], \"6\": [\"rgb(237,248,233)\", \"rgb(199,233,192)\", \"rgb(161,217,155)\", \"rgb(116,196,118)\", \"rgb(49,163,84)\", \"rgb(0,109,44)\"], \"7\": [\"rgb(237,248,233)\", \"rgb(199,233,192)\", \"rgb(161,217,155)\", \"rgb(116,196,118)\", \"rgb(65,171,93)\", \"rgb(35,139,69)\", \"rgb(0,90,50)\"], \"8\": [\"rgb(247,252,245)\", \"rgb(229,245,224)\", \"rgb(199,233,192)\", \"rgb(161,217,155)\", \"rgb(116,196,118)\", \"rgb(65,171,93)\", \"rgb(35,139,69)\", \"rgb(0,90,50)\"], \"9\": [\"rgb(247,252,245)\", \"rgb(229,245,224)\", \"rgb(199,233,192)\", \"rgb(161,217,155)\", \"rgb(116,196,118)\", \"rgb(65,171,93)\", \"rgb(35,139,69)\", \"rgb(0,109,44)\", \"rgb(0,68,27)\"], \"type\": \"seq\" },\n \"YlGnBu\": { \"3\": [\"rgb(237,248,177)\", \"rgb(127,205,187)\", \"rgb(44,127,184)\"], \"4\": [\"rgb(255,255,204)\", \"rgb(161,218,180)\", \"rgb(65,182,196)\", \"rgb(34,94,168)\"], \"5\": [\"rgb(255,255,204)\", \"rgb(161,218,180)\", \"rgb(65,182,196)\", \"rgb(44,127,184)\", \"rgb(37,52,148)\"], \"6\": [\"rgb(255,255,204)\", \"rgb(199,233,180)\", \"rgb(127,205,187)\", \"rgb(65,182,196)\", \"rgb(44,127,184)\", \"rgb(37,52,148)\"], \"7\": [\"rgb(255,255,204)\", \"rgb(199,233,180)\", \"rgb(127,205,187)\", \"rgb(65,182,196)\", \"rgb(29,145,192)\", \"rgb(34,94,168)\", \"rgb(12,44,132)\"], \"8\": [\"rgb(255,255,217)\", \"rgb(237,248,177)\", \"rgb(199,233,180)\", \"rgb(127,205,187)\", \"rgb(65,182,196)\", \"rgb(29,145,192)\", \"rgb(34,94,168)\", \"rgb(12,44,132)\"], \"9\": [\"rgb(255,255,217)\", \"rgb(237,248,177)\", \"rgb(199,233,180)\", \"rgb(127,205,187)\", \"rgb(65,182,196)\", \"rgb(29,145,192)\", \"rgb(34,94,168)\", \"rgb(37,52,148)\", \"rgb(8,29,88)\"], \"type\": \"seq\" },\n \"Purples\": { \"3\": [\"rgb(239,237,245)\", \"rgb(188,189,220)\", \"rgb(117,107,177)\"], \"4\": [\"rgb(242,240,247)\", \"rgb(203,201,226)\", \"rgb(158,154,200)\", \"rgb(106,81,163)\"], \"5\": [\"rgb(242,240,247)\", \"rgb(203,201,226)\", \"rgb(158,154,200)\", \"rgb(117,107,177)\", \"rgb(84,39,143)\"], \"6\": [\"rgb(242,240,247)\", \"rgb(218,218,235)\", \"rgb(188,189,220)\", \"rgb(158,154,200)\", \"rgb(117,107,177)\", \"rgb(84,39,143)\"], \"7\": [\"rgb(242,240,247)\", \"rgb(218,218,235)\", \"rgb(188,189,220)\", \"rgb(158,154,200)\", \"rgb(128,125,186)\", \"rgb(106,81,163)\", \"rgb(74,20,134)\"], \"8\": [\"rgb(252,251,253)\", \"rgb(239,237,245)\", \"rgb(218,218,235)\", \"rgb(188,189,220)\", \"rgb(158,154,200)\", \"rgb(128,125,186)\", \"rgb(106,81,163)\", \"rgb(74,20,134)\"], \"9\": [\"rgb(252,251,253)\", \"rgb(239,237,245)\", \"rgb(218,218,235)\", \"rgb(188,189,220)\", \"rgb(158,154,200)\", \"rgb(128,125,186)\", \"rgb(106,81,163)\", \"rgb(84,39,143)\", \"rgb(63,0,125)\"], \"type\": \"seq\" },\n \"GnBu\": { \"3\": [\"rgb(224,243,219)\", \"rgb(168,221,181)\", \"rgb(67,162,202)\"], \"4\": [\"rgb(240,249,232)\", \"rgb(186,228,188)\", \"rgb(123,204,196)\", \"rgb(43,140,190)\"], \"5\": [\"rgb(240,249,232)\", \"rgb(186,228,188)\", \"rgb(123,204,196)\", \"rgb(67,162,202)\", \"rgb(8,104,172)\"], \"6\": [\"rgb(240,249,232)\", \"rgb(204,235,197)\", \"rgb(168,221,181)\", \"rgb(123,204,196)\", \"rgb(67,162,202)\", \"rgb(8,104,172)\"], \"7\": [\"rgb(240,249,232)\", \"rgb(204,235,197)\", \"rgb(168,221,181)\", \"rgb(123,204,196)\", \"rgb(78,179,211)\", \"rgb(43,140,190)\", \"rgb(8,88,158)\"], \"8\": [\"rgb(247,252,240)\", \"rgb(224,243,219)\", \"rgb(204,235,197)\", \"rgb(168,221,181)\", \"rgb(123,204,196)\", \"rgb(78,179,211)\", \"rgb(43,140,190)\", \"rgb(8,88,158)\"], \"9\": [\"rgb(247,252,240)\", \"rgb(224,243,219)\", \"rgb(204,235,197)\", \"rgb(168,221,181)\", \"rgb(123,204,196)\", \"rgb(78,179,211)\", \"rgb(43,140,190)\", \"rgb(8,104,172)\", \"rgb(8,64,129)\"], \"type\": \"seq\" },\n \"Greys\": { \"3\": [\"rgb(240,240,240)\", \"rgb(189,189,189)\", \"rgb(99,99,99)\"], \"4\": [\"rgb(247,247,247)\", \"rgb(204,204,204)\", \"rgb(150,150,150)\", \"rgb(82,82,82)\"], \"5\": [\"rgb(247,247,247)\", \"rgb(204,204,204)\", \"rgb(150,150,150)\", \"rgb(99,99,99)\", \"rgb(37,37,37)\"], \"6\": [\"rgb(247,247,247)\", \"rgb(217,217,217)\", \"rgb(189,189,189)\", \"rgb(150,150,150)\", \"rgb(99,99,99)\", \"rgb(37,37,37)\"], \"7\": [\"rgb(247,247,247)\", \"rgb(217,217,217)\", \"rgb(189,189,189)\", \"rgb(150,150,150)\", \"rgb(115,115,115)\", \"rgb(82,82,82)\", \"rgb(37,37,37)\"], \"8\": [\"rgb(255,255,255)\", \"rgb(240,240,240)\", \"rgb(217,217,217)\", \"rgb(189,189,189)\", \"rgb(150,150,150)\", \"rgb(115,115,115)\", \"rgb(82,82,82)\", \"rgb(37,37,37)\"], \"9\": [\"rgb(255,255,255)\", \"rgb(240,240,240)\", \"rgb(217,217,217)\", \"rgb(189,189,189)\", \"rgb(150,150,150)\", \"rgb(115,115,115)\", \"rgb(82,82,82)\", \"rgb(37,37,37)\", \"rgb(0,0,0)\"], \"type\": \"seq\" },\n \"YlOrRd\": { \"3\": [\"rgb(255,237,160)\", \"rgb(254,178,76)\", \"rgb(240,59,32)\"], \"4\": [\"rgb(255,255,178)\", \"rgb(254,204,92)\", \"rgb(253,141,60)\", \"rgb(227,26,28)\"], \"5\": [\"rgb(255,255,178)\", \"rgb(254,204,92)\", \"rgb(253,141,60)\", \"rgb(240,59,32)\", \"rgb(189,0,38)\"], \"6\": [\"rgb(255,255,178)\", \"rgb(254,217,118)\", \"rgb(254,178,76)\", \"rgb(253,141,60)\", \"rgb(240,59,32)\", \"rgb(189,0,38)\"], \"7\": [\"rgb(255,255,178)\", \"rgb(254,217,118)\", \"rgb(254,178,76)\", \"rgb(253,141,60)\", \"rgb(252,78,42)\", \"rgb(227,26,28)\", \"rgb(177,0,38)\"], \"8\": [\"rgb(255,255,204)\", \"rgb(255,237,160)\", \"rgb(254,217,118)\", \"rgb(254,178,76)\", \"rgb(253,141,60)\", \"rgb(252,78,42)\", \"rgb(227,26,28)\", \"rgb(177,0,38)\"], \"type\": \"seq\" },\n \"PuRd\": { \"3\": [\"rgb(231,225,239)\", \"rgb(201,148,199)\", \"rgb(221,28,119)\"], \"4\": [\"rgb(241,238,246)\", \"rgb(215,181,216)\", \"rgb(223,101,176)\", \"rgb(206,18,86)\"], \"5\": [\"rgb(241,238,246)\", \"rgb(215,181,216)\", \"rgb(223,101,176)\", \"rgb(221,28,119)\", \"rgb(152,0,67)\"], \"6\": [\"rgb(241,238,246)\", \"rgb(212,185,218)\", \"rgb(201,148,199)\", \"rgb(223,101,176)\", \"rgb(221,28,119)\", \"rgb(152,0,67)\"], \"7\": [\"rgb(241,238,246)\", \"rgb(212,185,218)\", \"rgb(201,148,199)\", \"rgb(223,101,176)\", \"rgb(231,41,138)\", \"rgb(206,18,86)\", \"rgb(145,0,63)\"], \"8\": [\"rgb(247,244,249)\", \"rgb(231,225,239)\", \"rgb(212,185,218)\", \"rgb(201,148,199)\", \"rgb(223,101,176)\", \"rgb(231,41,138)\", \"rgb(206,18,86)\", \"rgb(145,0,63)\"], \"9\": [\"rgb(247,244,249)\", \"rgb(231,225,239)\", \"rgb(212,185,218)\", \"rgb(201,148,199)\", \"rgb(223,101,176)\", \"rgb(231,41,138)\", \"rgb(206,18,86)\", \"rgb(152,0,67)\", \"rgb(103,0,31)\"], \"type\": \"seq\" },\n \"Blues\": { \"3\": [\"rgb(222,235,247)\", \"rgb(158,202,225)\", \"rgb(49,130,189)\"], \"4\": [\"rgb(239,243,255)\", \"rgb(189,215,231)\", \"rgb(107,174,214)\", \"rgb(33,113,181)\"], \"5\": [\"rgb(239,243,255)\", \"rgb(189,215,231)\", \"rgb(107,174,214)\", \"rgb(49,130,189)\", \"rgb(8,81,156)\"], \"6\": [\"rgb(239,243,255)\", \"rgb(198,219,239)\", \"rgb(158,202,225)\", \"rgb(107,174,214)\", \"rgb(49,130,189)\", \"rgb(8,81,156)\"], \"7\": [\"rgb(239,243,255)\", \"rgb(198,219,239)\", \"rgb(158,202,225)\", \"rgb(107,174,214)\", \"rgb(66,146,198)\", \"rgb(33,113,181)\", \"rgb(8,69,148)\"], \"8\": [\"rgb(247,251,255)\", \"rgb(222,235,247)\", \"rgb(198,219,239)\", \"rgb(158,202,225)\", \"rgb(107,174,214)\", \"rgb(66,146,198)\", \"rgb(33,113,181)\", \"rgb(8,69,148)\"], \"9\": [\"rgb(247,251,255)\", \"rgb(222,235,247)\", \"rgb(198,219,239)\", \"rgb(158,202,225)\", \"rgb(107,174,214)\", \"rgb(66,146,198)\", \"rgb(33,113,181)\", \"rgb(8,81,156)\", \"rgb(8,48,107)\"], \"type\": \"seq\" },\n \"PuBuGn\": { \"3\": [\"rgb(236,226,240)\", \"rgb(166,189,219)\", \"rgb(28,144,153)\"], \"4\": [\"rgb(246,239,247)\", \"rgb(189,201,225)\", \"rgb(103,169,207)\", \"rgb(2,129,138)\"], \"5\": [\"rgb(246,239,247)\", \"rgb(189,201,225)\", \"rgb(103,169,207)\", \"rgb(28,144,153)\", \"rgb(1,108,89)\"], \"6\": [\"rgb(246,239,247)\", \"rgb(208,209,230)\", \"rgb(166,189,219)\", \"rgb(103,169,207)\", \"rgb(28,144,153)\", \"rgb(1,108,89)\"], \"7\": [\"rgb(246,239,247)\", \"rgb(208,209,230)\", \"rgb(166,189,219)\", \"rgb(103,169,207)\", \"rgb(54,144,192)\", \"rgb(2,129,138)\", \"rgb(1,100,80)\"], \"8\": [\"rgb(255,247,251)\", \"rgb(236,226,240)\", \"rgb(208,209,230)\", \"rgb(166,189,219)\", \"rgb(103,169,207)\", \"rgb(54,144,192)\", \"rgb(2,129,138)\", \"rgb(1,100,80)\"], \"9\": [\"rgb(255,247,251)\", \"rgb(236,226,240)\", \"rgb(208,209,230)\", \"rgb(166,189,219)\", \"rgb(103,169,207)\", \"rgb(54,144,192)\", \"rgb(2,129,138)\", \"rgb(1,108,89)\", \"rgb(1,70,54)\"], \"type\": \"seq\" },\n \"viridis\": { \"256\": [\"#440154\", \"#440256\", \"#450457\", \"#450559\", \"#46075a\", \"#46085c\", \"#460a5d\", \"#460b5e\", \"#470d60\", \"#470e61\", \"#471063\", \"#471164\", \"#471365\", \"#481467\", \"#481668\", \"#481769\", \"#48186a\", \"#481a6c\", \"#481b6d\", \"#481c6e\", \"#481d6f\", \"#481f70\", \"#482071\", \"#482173\", \"#482374\", \"#482475\", \"#482576\", \"#482677\", \"#482878\", \"#482979\", \"#472a7a\", \"#472c7a\", \"#472d7b\", \"#472e7c\", \"#472f7d\", \"#46307e\", \"#46327e\", \"#46337f\", \"#463480\", \"#453581\", \"#453781\", \"#453882\", \"#443983\", \"#443a83\", \"#443b84\", \"#433d84\", \"#433e85\", \"#423f85\", \"#424086\", \"#424186\", \"#414287\", \"#414487\", \"#404588\", \"#404688\", \"#3f4788\", \"#3f4889\", \"#3e4989\", \"#3e4a89\", \"#3e4c8a\", \"#3d4d8a\", \"#3d4e8a\", \"#3c4f8a\", \"#3c508b\", \"#3b518b\", \"#3b528b\", \"#3a538b\", \"#3a548c\", \"#39558c\", \"#39568c\", \"#38588c\", \"#38598c\", \"#375a8c\", \"#375b8d\", \"#365c8d\", \"#365d8d\", \"#355e8d\", \"#355f8d\", \"#34608d\", \"#34618d\", \"#33628d\", \"#33638d\", \"#32648e\", \"#32658e\", \"#31668e\", \"#31678e\", \"#31688e\", \"#30698e\", \"#306a8e\", \"#2f6b8e\", \"#2f6c8e\", \"#2e6d8e\", \"#2e6e8e\", \"#2e6f8e\", \"#2d708e\", \"#2d718e\", \"#2c718e\", \"#2c728e\", \"#2c738e\", \"#2b748e\", \"#2b758e\", \"#2a768e\", \"#2a778e\", \"#2a788e\", \"#29798e\", \"#297a8e\", \"#297b8e\", \"#287c8e\", \"#287d8e\", \"#277e8e\", \"#277f8e\", \"#27808e\", \"#26818e\", \"#26828e\", \"#26828e\", \"#25838e\", \"#25848e\", \"#25858e\", \"#24868e\", \"#24878e\", \"#23888e\", \"#23898e\", \"#238a8d\", \"#228b8d\", \"#228c8d\", \"#228d8d\", \"#218e8d\", \"#218f8d\", \"#21908d\", \"#21918c\", \"#20928c\", \"#20928c\", \"#20938c\", \"#1f948c\", \"#1f958b\", \"#1f968b\", \"#1f978b\", \"#1f988b\", \"#1f998a\", \"#1f9a8a\", \"#1e9b8a\", \"#1e9c89\", \"#1e9d89\", \"#1f9e89\", \"#1f9f88\", \"#1fa088\", \"#1fa188\", \"#1fa187\", \"#1fa287\", \"#20a386\", \"#20a486\", \"#21a585\", \"#21a685\", \"#22a785\", \"#22a884\", \"#23a983\", \"#24aa83\", \"#25ab82\", \"#25ac82\", \"#26ad81\", \"#27ad81\", \"#28ae80\", \"#29af7f\", \"#2ab07f\", \"#2cb17e\", \"#2db27d\", \"#2eb37c\", \"#2fb47c\", \"#31b57b\", \"#32b67a\", \"#34b679\", \"#35b779\", \"#37b878\", \"#38b977\", \"#3aba76\", \"#3bbb75\", \"#3dbc74\", \"#3fbc73\", \"#40bd72\", \"#42be71\", \"#44bf70\", \"#46c06f\", \"#48c16e\", \"#4ac16d\", \"#4cc26c\", \"#4ec36b\", \"#50c46a\", \"#52c569\", \"#54c568\", \"#56c667\", \"#58c765\", \"#5ac864\", \"#5cc863\", \"#5ec962\", \"#60ca60\", \"#63cb5f\", \"#65cb5e\", \"#67cc5c\", \"#69cd5b\", \"#6ccd5a\", \"#6ece58\", \"#70cf57\", \"#73d056\", \"#75d054\", \"#77d153\", \"#7ad151\", \"#7cd250\", \"#7fd34e\", \"#81d34d\", \"#84d44b\", \"#86d549\", \"#89d548\", \"#8bd646\", \"#8ed645\", \"#90d743\", \"#93d741\", \"#95d840\", \"#98d83e\", \"#9bd93c\", \"#9dd93b\", \"#a0da39\", \"#a2da37\", \"#a5db36\", \"#a8db34\", \"#aadc32\", \"#addc30\", \"#b0dd2f\", \"#b2dd2d\", \"#b5de2b\", \"#b8de29\", \"#bade28\", \"#bddf26\", \"#c0df25\", \"#c2df23\", \"#c5e021\", \"#c8e020\", \"#cae11f\", \"#cde11d\", \"#d0e11c\", \"#d2e21b\", \"#d5e21a\", \"#d8e219\", \"#dae319\", \"#dde318\", \"#dfe318\", \"#e2e418\", \"#e5e419\", \"#e7e419\", \"#eae51a\", \"#ece51b\", \"#efe51c\", \"#f1e51d\", \"#f4e61e\", \"#f6e620\", \"#f8e621\", \"#fbe723\", \"#fde725\"], \"type\": \"seq\" },\n \"plasma\": { \"256\": [\"#0d0887\", \"#100788\", \"#130789\", \"#16078a\", \"#19068c\", \"#1b068d\", \"#1d068e\", \"#20068f\", \"#220690\", \"#240691\", \"#260591\", \"#280592\", \"#2a0593\", \"#2c0594\", \"#2e0595\", \"#2f0596\", \"#310597\", \"#330597\", \"#350498\", \"#370499\", \"#38049a\", \"#3a049a\", \"#3c049b\", \"#3e049c\", \"#3f049c\", \"#41049d\", \"#43039e\", \"#44039e\", \"#46039f\", \"#48039f\", \"#4903a0\", \"#4b03a1\", \"#4c02a1\", \"#4e02a2\", \"#5002a2\", \"#5102a3\", \"#5302a3\", \"#5502a4\", \"#5601a4\", \"#5801a4\", \"#5901a5\", \"#5b01a5\", \"#5c01a6\", \"#5e01a6\", \"#6001a6\", \"#6100a7\", \"#6300a7\", \"#6400a7\", \"#6600a7\", \"#6700a8\", \"#6900a8\", \"#6a00a8\", \"#6c00a8\", \"#6e00a8\", \"#6f00a8\", \"#7100a8\", \"#7201a8\", \"#7401a8\", \"#7501a8\", \"#7701a8\", \"#7801a8\", \"#7a02a8\", \"#7b02a8\", \"#7d03a8\", \"#7e03a8\", \"#8004a8\", \"#8104a7\", \"#8305a7\", \"#8405a7\", \"#8606a6\", \"#8707a6\", \"#8808a6\", \"#8a09a5\", \"#8b0aa5\", \"#8d0ba5\", \"#8e0ca4\", \"#8f0da4\", \"#910ea3\", \"#920fa3\", \"#9410a2\", \"#9511a1\", \"#9613a1\", \"#9814a0\", \"#99159f\", \"#9a169f\", \"#9c179e\", \"#9d189d\", \"#9e199d\", \"#a01a9c\", \"#a11b9b\", \"#a21d9a\", \"#a31e9a\", \"#a51f99\", \"#a62098\", \"#a72197\", \"#a82296\", \"#aa2395\", \"#ab2494\", \"#ac2694\", \"#ad2793\", \"#ae2892\", \"#b02991\", \"#b12a90\", \"#b22b8f\", \"#b32c8e\", \"#b42e8d\", \"#b52f8c\", \"#b6308b\", \"#b7318a\", \"#b83289\", \"#ba3388\", \"#bb3488\", \"#bc3587\", \"#bd3786\", \"#be3885\", \"#bf3984\", \"#c03a83\", \"#c13b82\", \"#c23c81\", \"#c33d80\", \"#c43e7f\", \"#c5407e\", \"#c6417d\", \"#c7427c\", \"#c8437b\", \"#c9447a\", \"#ca457a\", \"#cb4679\", \"#cc4778\", \"#cc4977\", \"#cd4a76\", \"#ce4b75\", \"#cf4c74\", \"#d04d73\", \"#d14e72\", \"#d24f71\", \"#d35171\", \"#d45270\", \"#d5536f\", \"#d5546e\", \"#d6556d\", \"#d7566c\", \"#d8576b\", \"#d9586a\", \"#da5a6a\", \"#da5b69\", \"#db5c68\", \"#dc5d67\", \"#dd5e66\", \"#de5f65\", \"#de6164\", \"#df6263\", \"#e06363\", \"#e16462\", \"#e26561\", \"#e26660\", \"#e3685f\", \"#e4695e\", \"#e56a5d\", \"#e56b5d\", \"#e66c5c\", \"#e76e5b\", \"#e76f5a\", \"#e87059\", \"#e97158\", \"#e97257\", \"#ea7457\", \"#eb7556\", \"#eb7655\", \"#ec7754\", \"#ed7953\", \"#ed7a52\", \"#ee7b51\", \"#ef7c51\", \"#ef7e50\", \"#f07f4f\", \"#f0804e\", \"#f1814d\", \"#f1834c\", \"#f2844b\", \"#f3854b\", \"#f3874a\", \"#f48849\", \"#f48948\", \"#f58b47\", \"#f58c46\", \"#f68d45\", \"#f68f44\", \"#f79044\", \"#f79143\", \"#f79342\", \"#f89441\", \"#f89540\", \"#f9973f\", \"#f9983e\", \"#f99a3e\", \"#fa9b3d\", \"#fa9c3c\", \"#fa9e3b\", \"#fb9f3a\", \"#fba139\", \"#fba238\", \"#fca338\", \"#fca537\", \"#fca636\", \"#fca835\", \"#fca934\", \"#fdab33\", \"#fdac33\", \"#fdae32\", \"#fdaf31\", \"#fdb130\", \"#fdb22f\", \"#fdb42f\", \"#fdb52e\", \"#feb72d\", \"#feb82c\", \"#feba2c\", \"#febb2b\", \"#febd2a\", \"#febe2a\", \"#fec029\", \"#fdc229\", \"#fdc328\", \"#fdc527\", \"#fdc627\", \"#fdc827\", \"#fdca26\", \"#fdcb26\", \"#fccd25\", \"#fcce25\", \"#fcd025\", \"#fcd225\", \"#fbd324\", \"#fbd524\", \"#fbd724\", \"#fad824\", \"#fada24\", \"#f9dc24\", \"#f9dd25\", \"#f8df25\", \"#f8e125\", \"#f7e225\", \"#f7e425\", \"#f6e626\", \"#f6e826\", \"#f5e926\", \"#f5eb27\", \"#f4ed27\", \"#f3ee27\", \"#f3f027\", \"#f2f227\", \"#f1f426\", \"#f1f525\", \"#f0f724\", \"#f0f921\"], \"type\": \"seq\" },\n \"inferno\": { \"256\": [\"#000004\", \"#010005\", \"#010106\", \"#010108\", \"#02010a\", \"#02020c\", \"#02020e\", \"#030210\", \"#040312\", \"#040314\", \"#050417\", \"#060419\", \"#07051b\", \"#08051d\", \"#09061f\", \"#0a0722\", \"#0b0724\", \"#0c0826\", \"#0d0829\", \"#0e092b\", \"#10092d\", \"#110a30\", \"#120a32\", \"#140b34\", \"#150b37\", \"#160b39\", \"#180c3c\", \"#190c3e\", \"#1b0c41\", \"#1c0c43\", \"#1e0c45\", \"#1f0c48\", \"#210c4a\", \"#230c4c\", \"#240c4f\", \"#260c51\", \"#280b53\", \"#290b55\", \"#2b0b57\", \"#2d0b59\", \"#2f0a5b\", \"#310a5c\", \"#320a5e\", \"#340a5f\", \"#360961\", \"#380962\", \"#390963\", \"#3b0964\", \"#3d0965\", \"#3e0966\", \"#400a67\", \"#420a68\", \"#440a68\", \"#450a69\", \"#470b6a\", \"#490b6a\", \"#4a0c6b\", \"#4c0c6b\", \"#4d0d6c\", \"#4f0d6c\", \"#510e6c\", \"#520e6d\", \"#540f6d\", \"#550f6d\", \"#57106e\", \"#59106e\", \"#5a116e\", \"#5c126e\", \"#5d126e\", \"#5f136e\", \"#61136e\", \"#62146e\", \"#64156e\", \"#65156e\", \"#67166e\", \"#69166e\", \"#6a176e\", \"#6c186e\", \"#6d186e\", \"#6f196e\", \"#71196e\", \"#721a6e\", \"#741a6e\", \"#751b6e\", \"#771c6d\", \"#781c6d\", \"#7a1d6d\", \"#7c1d6d\", \"#7d1e6d\", \"#7f1e6c\", \"#801f6c\", \"#82206c\", \"#84206b\", \"#85216b\", \"#87216b\", \"#88226a\", \"#8a226a\", \"#8c2369\", \"#8d2369\", \"#8f2469\", \"#902568\", \"#922568\", \"#932667\", \"#952667\", \"#972766\", \"#982766\", \"#9a2865\", \"#9b2964\", \"#9d2964\", \"#9f2a63\", \"#a02a63\", \"#a22b62\", \"#a32c61\", \"#a52c60\", \"#a62d60\", \"#a82e5f\", \"#a92e5e\", \"#ab2f5e\", \"#ad305d\", \"#ae305c\", \"#b0315b\", \"#b1325a\", \"#b3325a\", \"#b43359\", \"#b63458\", \"#b73557\", \"#b93556\", \"#ba3655\", \"#bc3754\", \"#bd3853\", \"#bf3952\", \"#c03a51\", \"#c13a50\", \"#c33b4f\", \"#c43c4e\", \"#c63d4d\", \"#c73e4c\", \"#c83f4b\", \"#ca404a\", \"#cb4149\", \"#cc4248\", \"#ce4347\", \"#cf4446\", \"#d04545\", \"#d24644\", \"#d34743\", \"#d44842\", \"#d54a41\", \"#d74b3f\", \"#d84c3e\", \"#d94d3d\", \"#da4e3c\", \"#db503b\", \"#dd513a\", \"#de5238\", \"#df5337\", \"#e05536\", \"#e15635\", \"#e25734\", \"#e35933\", \"#e45a31\", \"#e55c30\", \"#e65d2f\", \"#e75e2e\", \"#e8602d\", \"#e9612b\", \"#ea632a\", \"#eb6429\", \"#eb6628\", \"#ec6726\", \"#ed6925\", \"#ee6a24\", \"#ef6c23\", \"#ef6e21\", \"#f06f20\", \"#f1711f\", \"#f1731d\", \"#f2741c\", \"#f3761b\", \"#f37819\", \"#f47918\", \"#f57b17\", \"#f57d15\", \"#f67e14\", \"#f68013\", \"#f78212\", \"#f78410\", \"#f8850f\", \"#f8870e\", \"#f8890c\", \"#f98b0b\", \"#f98c0a\", \"#f98e09\", \"#fa9008\", \"#fa9207\", \"#fa9407\", \"#fb9606\", \"#fb9706\", \"#fb9906\", \"#fb9b06\", \"#fb9d07\", \"#fc9f07\", \"#fca108\", \"#fca309\", \"#fca50a\", \"#fca60c\", \"#fca80d\", \"#fcaa0f\", \"#fcac11\", \"#fcae12\", \"#fcb014\", \"#fcb216\", \"#fcb418\", \"#fbb61a\", \"#fbb81d\", \"#fbba1f\", \"#fbbc21\", \"#fbbe23\", \"#fac026\", \"#fac228\", \"#fac42a\", \"#fac62d\", \"#f9c72f\", \"#f9c932\", \"#f9cb35\", \"#f8cd37\", \"#f8cf3a\", \"#f7d13d\", \"#f7d340\", \"#f6d543\", \"#f6d746\", \"#f5d949\", \"#f5db4c\", \"#f4dd4f\", \"#f4df53\", \"#f4e156\", \"#f3e35a\", \"#f3e55d\", \"#f2e661\", \"#f2e865\", \"#f2ea69\", \"#f1ec6d\", \"#f1ed71\", \"#f1ef75\", \"#f1f179\", \"#f2f27d\", \"#f2f482\", \"#f3f586\", \"#f3f68a\", \"#f4f88e\", \"#f5f992\", \"#f6fa96\", \"#f8fb9a\", \"#f9fc9d\", \"#fafda1\", \"#fcffa4\"], \"type\": \"seq\" },\n \"magma\": { \"256\": [\"#000004\", \"#010005\", \"#010106\", \"#010108\", \"#020109\", \"#02020b\", \"#02020d\", \"#03030f\", \"#030312\", \"#040414\", \"#050416\", \"#060518\", \"#06051a\", \"#07061c\", \"#08071e\", \"#090720\", \"#0a0822\", \"#0b0924\", \"#0c0926\", \"#0d0a29\", \"#0e0b2b\", \"#100b2d\", \"#110c2f\", \"#120d31\", \"#130d34\", \"#140e36\", \"#150e38\", \"#160f3b\", \"#180f3d\", \"#19103f\", \"#1a1042\", \"#1c1044\", \"#1d1147\", \"#1e1149\", \"#20114b\", \"#21114e\", \"#221150\", \"#241253\", \"#251255\", \"#271258\", \"#29115a\", \"#2a115c\", \"#2c115f\", \"#2d1161\", \"#2f1163\", \"#311165\", \"#331067\", \"#341069\", \"#36106b\", \"#38106c\", \"#390f6e\", \"#3b0f70\", \"#3d0f71\", \"#3f0f72\", \"#400f74\", \"#420f75\", \"#440f76\", \"#451077\", \"#471078\", \"#491078\", \"#4a1079\", \"#4c117a\", \"#4e117b\", \"#4f127b\", \"#51127c\", \"#52137c\", \"#54137d\", \"#56147d\", \"#57157e\", \"#59157e\", \"#5a167e\", \"#5c167f\", \"#5d177f\", \"#5f187f\", \"#601880\", \"#621980\", \"#641a80\", \"#651a80\", \"#671b80\", \"#681c81\", \"#6a1c81\", \"#6b1d81\", \"#6d1d81\", \"#6e1e81\", \"#701f81\", \"#721f81\", \"#732081\", \"#752181\", \"#762181\", \"#782281\", \"#792282\", \"#7b2382\", \"#7c2382\", \"#7e2482\", \"#802582\", \"#812581\", \"#832681\", \"#842681\", \"#862781\", \"#882781\", \"#892881\", \"#8b2981\", \"#8c2981\", \"#8e2a81\", \"#902a81\", \"#912b81\", \"#932b80\", \"#942c80\", \"#962c80\", \"#982d80\", \"#992d80\", \"#9b2e7f\", \"#9c2e7f\", \"#9e2f7f\", \"#a02f7f\", \"#a1307e\", \"#a3307e\", \"#a5317e\", \"#a6317d\", \"#a8327d\", \"#aa337d\", \"#ab337c\", \"#ad347c\", \"#ae347b\", \"#b0357b\", \"#b2357b\", \"#b3367a\", \"#b5367a\", \"#b73779\", \"#b83779\", \"#ba3878\", \"#bc3978\", \"#bd3977\", \"#bf3a77\", \"#c03a76\", \"#c23b75\", \"#c43c75\", \"#c53c74\", \"#c73d73\", \"#c83e73\", \"#ca3e72\", \"#cc3f71\", \"#cd4071\", \"#cf4070\", \"#d0416f\", \"#d2426f\", \"#d3436e\", \"#d5446d\", \"#d6456c\", \"#d8456c\", \"#d9466b\", \"#db476a\", \"#dc4869\", \"#de4968\", \"#df4a68\", \"#e04c67\", \"#e24d66\", \"#e34e65\", \"#e44f64\", \"#e55064\", \"#e75263\", \"#e85362\", \"#e95462\", \"#ea5661\", \"#eb5760\", \"#ec5860\", \"#ed5a5f\", \"#ee5b5e\", \"#ef5d5e\", \"#f05f5e\", \"#f1605d\", \"#f2625d\", \"#f2645c\", \"#f3655c\", \"#f4675c\", \"#f4695c\", \"#f56b5c\", \"#f66c5c\", \"#f66e5c\", \"#f7705c\", \"#f7725c\", \"#f8745c\", \"#f8765c\", \"#f9785d\", \"#f9795d\", \"#f97b5d\", \"#fa7d5e\", \"#fa7f5e\", \"#fa815f\", \"#fb835f\", \"#fb8560\", \"#fb8761\", \"#fc8961\", \"#fc8a62\", \"#fc8c63\", \"#fc8e64\", \"#fc9065\", \"#fd9266\", \"#fd9467\", \"#fd9668\", \"#fd9869\", \"#fd9a6a\", \"#fd9b6b\", \"#fe9d6c\", \"#fe9f6d\", \"#fea16e\", \"#fea36f\", \"#fea571\", \"#fea772\", \"#fea973\", \"#feaa74\", \"#feac76\", \"#feae77\", \"#feb078\", \"#feb27a\", \"#feb47b\", \"#feb67c\", \"#feb77e\", \"#feb97f\", \"#febb81\", \"#febd82\", \"#febf84\", \"#fec185\", \"#fec287\", \"#fec488\", \"#fec68a\", \"#fec88c\", \"#feca8d\", \"#fecc8f\", \"#fecd90\", \"#fecf92\", \"#fed194\", \"#fed395\", \"#fed597\", \"#fed799\", \"#fed89a\", \"#fdda9c\", \"#fddc9e\", \"#fddea0\", \"#fde0a1\", \"#fde2a3\", \"#fde3a5\", \"#fde5a7\", \"#fde7a9\", \"#fde9aa\", \"#fdebac\", \"#fcecae\", \"#fceeb0\", \"#fcf0b2\", \"#fcf2b4\", \"#fcf4b6\", \"#fcf6b8\", \"#fcf7b9\", \"#fcf9bb\", \"#fcfbbd\", \"#fcfdbf\"], \"type\": \"seq\" },\n};\nexports.matplotlib = {\n \"viridis\": { \"256\": [\"#440154\", \"#440256\", \"#450457\", \"#450559\", \"#46075a\", \"#46085c\", \"#460a5d\", \"#460b5e\", \"#470d60\", \"#470e61\", \"#471063\", \"#471164\", \"#471365\", \"#481467\", \"#481668\", \"#481769\", \"#48186a\", \"#481a6c\", \"#481b6d\", \"#481c6e\", \"#481d6f\", \"#481f70\", \"#482071\", \"#482173\", \"#482374\", \"#482475\", \"#482576\", \"#482677\", \"#482878\", \"#482979\", \"#472a7a\", \"#472c7a\", \"#472d7b\", \"#472e7c\", \"#472f7d\", \"#46307e\", \"#46327e\", \"#46337f\", \"#463480\", \"#453581\", \"#453781\", \"#453882\", \"#443983\", \"#443a83\", \"#443b84\", \"#433d84\", \"#433e85\", \"#423f85\", \"#424086\", \"#424186\", \"#414287\", \"#414487\", \"#404588\", \"#404688\", \"#3f4788\", \"#3f4889\", \"#3e4989\", \"#3e4a89\", \"#3e4c8a\", \"#3d4d8a\", \"#3d4e8a\", \"#3c4f8a\", \"#3c508b\", \"#3b518b\", \"#3b528b\", \"#3a538b\", \"#3a548c\", \"#39558c\", \"#39568c\", \"#38588c\", \"#38598c\", \"#375a8c\", \"#375b8d\", \"#365c8d\", \"#365d8d\", \"#355e8d\", \"#355f8d\", \"#34608d\", \"#34618d\", \"#33628d\", \"#33638d\", \"#32648e\", \"#32658e\", \"#31668e\", \"#31678e\", \"#31688e\", \"#30698e\", \"#306a8e\", \"#2f6b8e\", \"#2f6c8e\", \"#2e6d8e\", \"#2e6e8e\", \"#2e6f8e\", \"#2d708e\", \"#2d718e\", \"#2c718e\", \"#2c728e\", \"#2c738e\", \"#2b748e\", \"#2b758e\", \"#2a768e\", \"#2a778e\", \"#2a788e\", \"#29798e\", \"#297a8e\", \"#297b8e\", \"#287c8e\", \"#287d8e\", \"#277e8e\", \"#277f8e\", \"#27808e\", \"#26818e\", \"#26828e\", \"#26828e\", \"#25838e\", \"#25848e\", \"#25858e\", \"#24868e\", \"#24878e\", \"#23888e\", \"#23898e\", \"#238a8d\", \"#228b8d\", \"#228c8d\", \"#228d8d\", \"#218e8d\", \"#218f8d\", \"#21908d\", \"#21918c\", \"#20928c\", \"#20928c\", \"#20938c\", \"#1f948c\", \"#1f958b\", \"#1f968b\", \"#1f978b\", \"#1f988b\", \"#1f998a\", \"#1f9a8a\", \"#1e9b8a\", \"#1e9c89\", \"#1e9d89\", \"#1f9e89\", \"#1f9f88\", \"#1fa088\", \"#1fa188\", \"#1fa187\", \"#1fa287\", \"#20a386\", \"#20a486\", \"#21a585\", \"#21a685\", \"#22a785\", \"#22a884\", \"#23a983\", \"#24aa83\", \"#25ab82\", \"#25ac82\", \"#26ad81\", \"#27ad81\", \"#28ae80\", \"#29af7f\", \"#2ab07f\", \"#2cb17e\", \"#2db27d\", \"#2eb37c\", \"#2fb47c\", \"#31b57b\", \"#32b67a\", \"#34b679\", \"#35b779\", \"#37b878\", \"#38b977\", \"#3aba76\", \"#3bbb75\", \"#3dbc74\", \"#3fbc73\", \"#40bd72\", \"#42be71\", \"#44bf70\", \"#46c06f\", \"#48c16e\", \"#4ac16d\", \"#4cc26c\", \"#4ec36b\", \"#50c46a\", \"#52c569\", \"#54c568\", \"#56c667\", \"#58c765\", \"#5ac864\", \"#5cc863\", \"#5ec962\", \"#60ca60\", \"#63cb5f\", \"#65cb5e\", \"#67cc5c\", \"#69cd5b\", \"#6ccd5a\", \"#6ece58\", \"#70cf57\", \"#73d056\", \"#75d054\", \"#77d153\", \"#7ad151\", \"#7cd250\", \"#7fd34e\", \"#81d34d\", \"#84d44b\", \"#86d549\", \"#89d548\", \"#8bd646\", \"#8ed645\", \"#90d743\", \"#93d741\", \"#95d840\", \"#98d83e\", \"#9bd93c\", \"#9dd93b\", \"#a0da39\", \"#a2da37\", \"#a5db36\", \"#a8db34\", \"#aadc32\", \"#addc30\", \"#b0dd2f\", \"#b2dd2d\", \"#b5de2b\", \"#b8de29\", \"#bade28\", \"#bddf26\", \"#c0df25\", \"#c2df23\", \"#c5e021\", \"#c8e020\", \"#cae11f\", \"#cde11d\", \"#d0e11c\", \"#d2e21b\", \"#d5e21a\", \"#d8e219\", \"#dae319\", \"#dde318\", \"#dfe318\", \"#e2e418\", \"#e5e419\", \"#e7e419\", \"#eae51a\", \"#ece51b\", \"#efe51c\", \"#f1e51d\", \"#f4e61e\", \"#f6e620\", \"#f8e621\", \"#fbe723\", \"#fde725\"], \"type\": \"seq\" },\n};\nexports.default = colorbrewer;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JicmV3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29sb3JicmV3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDRzs7QUFFSCxnSEFBZ0g7QUFDaEgsNkhBQTZIO0FBQzdILE1BQU0sV0FBVyxHQUFHO0lBQ3BCLFVBQVUsRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQztJQUMxeEMsUUFBUSxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDdndDLE1BQU0sRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDNXdDLE1BQU0sRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQztJQUMveEMsTUFBTSxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQztJQUNueEMsUUFBUSxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0lBQ3h4QyxNQUFNLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQztJQUNwd0MsTUFBTSxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0lBQ3B3QyxNQUFNLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0lBRWx3QyxNQUFNLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDO0lBQzFzQixRQUFRLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDO0lBQzNzQixNQUFNLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUM7SUFDcjFCLE1BQU0sRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQztJQUN2akQsT0FBTyxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQztJQUMvcUIsUUFBUSxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDO0lBQ3ZnRCxTQUFTLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDO0lBQzF0QixTQUFTLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUM7SUFFcjVCLE1BQU0sRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQztJQUNsMkIsTUFBTSxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0lBQ2gzQixNQUFNLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0lBQy8zQixTQUFTLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0lBQ3YyQixNQUFNLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDMzJCLFFBQVEsRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDajJCLE1BQU0sRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQztJQUN4MkIsTUFBTSxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0lBQ3gyQixNQUFNLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0lBQ3QzQixRQUFRLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDMTJCLFFBQVEsRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDajNCLFNBQVMsRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDbjRCLE1BQU0sRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQztJQUN4M0IsT0FBTyxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQztJQUN4MkIsUUFBUSxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDanJCLE1BQU0sRUFBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQztJQUNqM0IsT0FBTyxFQUFHLEVBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0lBQ3QzQixRQUFRLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFFbDNCLFNBQVMsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDcGlGLFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDbmlGLFNBQVMsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7SUFDcGlGLE9BQU8sRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7Q0FDamlGLENBQUM7QUFFVyxRQUFBLFVBQVUsR0FBRztJQUMxQixTQUFTLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO0NBQ25pRixDQUFDO0FBRUYsa0JBQWUsV0FBVyxDQUFDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\n// const d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-drag\"), require(\"d3-selection\"), require(\"d3-selection-multi\"));\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst Mark_1 = require(\"./Mark\");\nconst _ = __importStar(require(\"underscore\"));\nclass ScatterBase extends Mark_1.Mark {\n render() {\n const base_creation_promise = super.render();\n const that = this;\n // Warning: arrow functions actually breaks the drag\n this.drag_listener = d3.drag()\n .subject(function (d) {\n return { x: that.x_scale.scale(d.x), y: that.y_scale.scale(d.y) };\n })\n .on(\"start\", function (d, i) { return that.drag_start(d, i, this); })\n .on(\"drag\", function (d, i) { return that.on_drag(d, i, this); })\n .on(\"end\", function (d, i) { return that.drag_ended(d, i, this); });\n this.selected_style = this.model.get(\"selected_style\");\n this.unselected_style = this.model.get(\"unselected_style\");\n this.selected_indices = this.model.get(\"selected\");\n this.hovered_style = this.model.get(\"hovered_style\");\n this.unhovered_style = this.model.get(\"unhovered_style\");\n this.hovered_index = (!this.model.get(\"hovered_point\")) ? null : [this.model.get(\"hovered_point\")];\n this.display_el_classes = [\"dot\", \"legendtext\"]; //FIXME\n this.event_metadata = {\n \"mouse_over\": {\n \"msg_name\": \"hover\",\n \"lookup_data\": false,\n \"hit_test\": true\n },\n \"legend_clicked\": {\n \"msg_name\": \"legend_click\",\n \"hit_test\": true\n },\n \"element_clicked\": {\n \"msg_name\": \"element_click\",\n \"lookup_data\": false,\n \"hit_test\": true\n },\n \"parent_clicked\": {\n \"msg_name\": \"background_click\",\n \"hit_test\": false\n }\n };\n this.displayed.then(() => {\n this.parent.tooltip_div.node().appendChild(this.tooltip_div.node());\n this.create_tooltip();\n });\n return base_creation_promise.then(() => {\n this.event_listeners = {};\n this.process_interactions();\n this.create_listeners();\n this.compute_view_padding();\n this.draw();\n });\n }\n set_ranges() {\n const x_scale = this.scales.x, y_scale = this.scales.y, size_scale = this.scales.size, opacity_scale = this.scales.opacity, skew_scale = this.scales.skew, rotation_scale = this.scales.rotation;\n if (x_scale) {\n x_scale.set_range(this.parent.padded_range(\"x\", x_scale.model));\n }\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n }\n if (size_scale) {\n size_scale.set_range([0, this.model.get(\"default_size\")]);\n }\n if (opacity_scale) {\n opacity_scale.set_range([0.2, 1]);\n }\n if (skew_scale) {\n skew_scale.set_range([0, 1]);\n }\n if (rotation_scale) {\n rotation_scale.set_range([0, 180]);\n }\n }\n set_positional_scales() {\n this.x_scale = this.scales.x;\n this.y_scale = this.scales.y;\n // If no scale for \"x\" or \"y\" is specified, figure scales are used.\n if (!this.x_scale) {\n this.x_scale = this.parent.scale_x;\n }\n if (!this.y_scale) {\n this.y_scale = this.parent.scale_y;\n }\n this.listenTo(this.x_scale, \"domain_changed\", () => {\n if (!this.model.dirty) {\n const animate = true;\n this.update_position(animate);\n }\n });\n this.listenTo(this.y_scale, \"domain_changed\", () => {\n if (!this.model.dirty) {\n const animate = true;\n this.update_position(animate);\n }\n });\n }\n initialize_additional_scales() {\n // function to create the additional scales and create the\n // listeners for the additional scales\n const color_scale = this.scales.color, size_scale = this.scales.size, opacity_scale = this.scales.opacity, skew_scale = this.scales.skew, rotation_scale = this.scales.rotation;\n // the following handlers are for changes in data that does not\n // impact the position of the elements\n if (color_scale) {\n this.listenTo(color_scale, \"domain_changed\", () => {\n const animate = true;\n if (!this.model.dirty) {\n this.color_scale_updated(animate);\n }\n });\n color_scale.on(\"color_scale_range_changed\", this.color_scale_updated, this);\n }\n if (size_scale) {\n this.listenTo(size_scale, \"domain_changed\", () => {\n const animate = true;\n this.update_default_size(animate);\n });\n }\n if (opacity_scale) {\n this.listenTo(opacity_scale, \"domain_changed\", () => {\n const animate = true;\n this.update_default_opacities(animate);\n });\n }\n if (skew_scale) {\n this.listenTo(skew_scale, \"domain_changed\", () => {\n const animate = true;\n this.update_default_skew(animate);\n });\n }\n if (rotation_scale) {\n this.listenTo(rotation_scale, \"domain_changed\", () => {\n const animate = true;\n this.update_position(animate);\n });\n }\n }\n create_listeners() {\n super.create_listeners();\n this.d3el.on(\"mouseover\", () => { this.event_dispatcher(\"mouse_over\"); })\n .on(\"mousemove\", () => { this.event_dispatcher(\"mouse_move\"); })\n .on(\"mouseout\", () => { this.event_dispatcher(\"mouse_out\"); });\n this.listenTo(this.model, \"data_updated\", () => {\n //animate dots on data update\n const animate = true;\n this.draw(animate);\n });\n this.listenTo(this.model, \"change:tooltip\", this.create_tooltip);\n this.listenTo(this.model, \"change:enable_hover\", () => { this.hide_tooltip(); });\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n this.listenTo(this.model, \"change:enable_move\", this.set_drag_behavior);\n this.listenTo(this.model, \"change:selected\", this.update_selected);\n this.listenTo(this.model, \"change:hovered_point\", this.update_hovered);\n this.listenTo(this.model, \"change:hovered_style\", this.hovered_style_updated);\n this.listenTo(this.model, \"change:unhovered_style\", this.unhovered_style_updated);\n this.listenTo(this.parent, \"bg_clicked\", () => {\n this.event_dispatcher(\"parent_clicked\");\n });\n }\n // The following three functions are convenience functions to get\n // the fill color / opacity / size of an element given the data.\n // In fact they are more than convenience functions as they limit the\n // points of entry to that logic which makes it easier to manage and to\n // keep consistent across different places where we use it.\n get_element_color(data, index) {\n const color_scale = this.scales.color;\n const colors = this.model.get(\"colors\");\n const len = colors.length;\n if (color_scale && data.color !== undefined && data.color !== null) {\n return color_scale.scale(data.color);\n }\n return colors[index % len];\n }\n get_element_size(data) {\n const size_scale = this.scales.size;\n if (size_scale && data.size !== undefined) {\n return size_scale.scale(data.size);\n }\n return this.model.get(\"default_size\");\n }\n get_element_opacity(data, index) {\n const opacity_scale = this.scales.opacity;\n const default_opacities = this.model.get(\"default_opacities\");\n const len = default_opacities.length;\n if (opacity_scale && data.opacity !== undefined) {\n return opacity_scale.scale(data.opacity);\n }\n return default_opacities[index % len];\n }\n get_element_skew(data) {\n const skew_scale = this.scales.skew;\n if (skew_scale && data.skew !== undefined) {\n return skew_scale.scale(data.skew);\n }\n return this.model.get(\"default_skew\");\n }\n get_element_rotation(d) {\n const rotation_scale = this.scales.rotation;\n return (!rotation_scale || !d.rotation) ? \"\" :\n \"rotate(\" + rotation_scale.scale(d.rotation) + \")\";\n }\n relayout() {\n this.set_ranges();\n this.update_position();\n }\n update_position(animate) {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n this.d3el.selectAll(\".object_grp\").transition(\"update_position\")\n .duration(animation_duration)\n .attr(\"transform\", (d) => {\n return \"translate(\" + (x_scale.scale(d.x) + x_scale.offset) +\n \",\" + (y_scale.scale(d.y) + y_scale.offset) + \")\" +\n this.get_element_rotation(d);\n });\n this.x_pixels = this.model.mark_data.map((el) => { return x_scale.scale(el.x) + x_scale.offset; });\n this.y_pixels = this.model.mark_data.map((el) => { return y_scale.scale(el.y) + y_scale.offset; });\n this.pixel_coords = this.model.mark_data.map((el) => {\n return [x_scale.scale(el.x) + x_scale.offset,\n y_scale.scale(el.y) + y_scale.offset];\n });\n }\n draw(animate) {\n this.set_ranges();\n const elements = this.d3el.selectAll(\".object_grp\")\n .data(this.model.mark_data, (d) => { return d.unique_id; });\n const elements_added = elements.enter().append(\"g\")\n .attr(\"class\", \"object_grp\");\n this.update_position(animate);\n this.set_drag_behavior();\n elements_added.on(\"click\", (d, i) => {\n this.event_dispatcher(\"element_clicked\", { \"data\": d, \"index\": i });\n });\n elements_added.on(\"mouseover\", (d, i) => {\n this.scatter_hover_handler({ \"data\": d, \"index\": i });\n });\n elements_added.on(\"mouseout\", () => {\n this.reset_hover_points();\n });\n this.draw_elements(animate, elements_added);\n // Removed the transition on exit as it was causing issues.\n // Elements are not removed until the transition is complete and\n // hence the setting styles function doesn't behave as intended.\n // The only way to call the function after all of the elements are\n // removed is round-about and doesn't look very nice visually.\n elements.exit().remove();\n }\n draw_elements(animate, elements_added) { }\n process_click(interaction) {\n super.process_click(interaction);\n switch (interaction) {\n case \"add\":\n this.event_listeners.parent_clicked = this.add_element;\n this.event_listeners.element_clicked = () => { };\n break;\n case \"delete\":\n this.event_listeners.parent_clicked = () => { };\n this.event_listeners.element_clicked = this.delete_element;\n break;\n case \"select\":\n this.event_listeners.parent_clicked = this.reset_selection;\n this.event_listeners.element_clicked = this.scatter_click_handler;\n break;\n }\n }\n reset_hover_points() {\n this.model.set(\"hovered_point\", null);\n this.hovered_index = null;\n this.touch();\n }\n scatter_hover_handler(args) {\n const index = args.index;\n this.model.set(\"hovered_point\", index, { updated_view: this });\n this.touch();\n }\n reset_selection() {\n this.model.set(\"selected\", null);\n this.selected_indices = null;\n this.touch();\n }\n scatter_click_handler(args) {\n const index = args.index;\n const idx = this.model.get(\"selected\") || [];\n let selected = Array.from(idx);\n // index of bar i. Checking if it is already present in the list.\n const elem_index = selected.indexOf(index);\n // Replacement for \"Accel\" modifier.\n const accelKey = d3GetEvent().ctrlKey || d3GetEvent().metaKey;\n if (elem_index > -1 && accelKey) {\n // if the index is already selected and if accel key is\n // pressed, remove the element from the list\n selected.splice(elem_index, 1);\n }\n else {\n if (accelKey) {\n //If accel is pressed and the bar is not already selcted\n //add the bar to the list of selected bars.\n selected.push(index);\n }\n // updating the array containing the bar indexes selected\n // and updating the style\n else {\n //if accel is not pressed, then clear the selected ones\n //and set the current element to the selected\n selected = [];\n selected.push(index);\n }\n }\n this.model.set(\"selected\", ((selected.length === 0) ? null : new Uint32Array(selected)), { updated_view: this });\n this.touch();\n let e = d3GetEvent();\n if (!e) {\n e = window.event;\n }\n if (e.cancelBubble !== undefined) { // IE\n e.cancelBubble = true;\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n e.preventDefault();\n }\n // Hovered Style related functions\n hovered_style_updated(model, style) {\n this.hovered_style = style;\n this.clear_style(model.previous(\"hovered_style\"), this.hovered_index);\n this.style_updated(style, this.hovered_index);\n }\n unhovered_style_updated(model, style) {\n this.unhovered_style = style;\n const hov_indices = this.hovered_index;\n const unhovered_indices = (hov_indices) ?\n _.range(this.model.mark_data.length).filter((index) => {\n return hov_indices.indexOf(index) === -1;\n }) : [];\n this.clear_style(model.previous(\"unhovered_style\"), unhovered_indices);\n this.style_updated(style, unhovered_indices);\n }\n draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) {\n this.legend_el = elem.selectAll(\".legend\" + this.uuid)\n .data([this.model.mark_data[0]]);\n const colors = this.model.get(\"colors\"), len = colors.length;\n const rect_dim = inter_y_disp * 0.8;\n const el_added = this.legend_el.enter()\n .append(\"g\")\n .attr(\"class\", \"legend\" + this.uuid)\n .attr(\"transform\", (d, i) => {\n return \"translate(0, \" + (i * inter_y_disp + y_disp) + \")\";\n })\n .on(\"mouseover\", () => {\n this.event_dispatcher(\"legend_mouse_over\");\n })\n .on(\"mouseout\", () => {\n this.event_dispatcher(\"legend_mouse_out\");\n })\n .on(\"click\", () => {\n this.event_dispatcher(\"legend_clicked\");\n });\n this.draw_legend_elements(el_added, rect_dim);\n this.legend_el.append(\"text\")\n .attr(\"class\", \"legendtext\")\n .attr(\"x\", rect_dim * 1.2)\n .attr(\"y\", rect_dim / 2)\n .attr(\"dy\", \"0.35em\")\n .text((d, i) => {\n return this.model.get(\"labels\")[i];\n })\n .style(\"fill\", (d, i) => {\n return colors[i % len];\n });\n const max_length = d3.max(this.model.get(\"labels\"), (d) => {\n return Number(d.length);\n });\n this.legend_el.exit().remove();\n return [1, max_length];\n }\n draw_legend_elements(elements_added, rect_dim) { }\n invert_point(pixel) {\n if (pixel === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return;\n }\n const abs_diff = this.x_pixels.map((elem) => { return Math.abs(elem - pixel); });\n const sel_index = abs_diff.indexOf(d3.min(abs_diff));\n this.model.set(\"selected\", new Uint32Array([sel_index]));\n this.touch();\n }\n selector_changed(point_selector, rect_selector) {\n if (point_selector === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return [];\n }\n const pixels = this.pixel_coords;\n const indices = new Uint32Array(_.range(pixels.length));\n const selected = indices.filter(index => {\n return point_selector(pixels[index]);\n });\n this.model.set(\"selected\", selected);\n this.touch();\n }\n update_selected(model, value) {\n this.selected_indices = value;\n this.apply_styles();\n }\n update_hovered(model, value) {\n this.hovered_index = value === null ? value : [value];\n this.apply_styles();\n }\n apply_styles(style_arr) {\n if (style_arr === undefined || style_arr == null) {\n style_arr = [this.selected_style, this.unselected_style,\n this.hovered_style, this.unhovered_style];\n }\n super.apply_styles([style_arr]);\n const all_indices = _.range(this.model.mark_data.length);\n this.set_style_on_elements(this.hovered_style, this.hovered_index);\n const unhovered_indices = (!this.hovered_index) ?\n [] : _.difference(all_indices, this.hovered_index);\n this.set_style_on_elements(this.unhovered_style, unhovered_indices);\n }\n clear_style(style_dict, indices) {\n // Function to clear the style of a dict on some or all the elements of the\n // chart.If indices is null, clears the style on all elements. If\n // not, clears on only the elements whose indices are mathcing.\n //\n // This function is not used right now. But it can be used if we\n // decide to accommodate more properties than those set by default.\n // Because those have to cleared specifically.\n let elements = this.d3el.selectAll(\".element\");\n if (indices) {\n elements = elements.filter((d, index) => {\n return indices.indexOf(index) !== -1;\n });\n }\n const clearing_style = {};\n for (let key in style_dict) {\n clearing_style[key] = null;\n }\n elements.styles(clearing_style);\n }\n set_style_on_elements(style, indices) {\n // If the index array is undefined or of length=0, exit the\n // function without doing anything\n if (!indices || indices.length === 0) {\n return;\n }\n // Also, return if the style object itself is blank\n if (Object.keys(style).length === 0) {\n return;\n }\n let elements = this.d3el.selectAll(\".element\");\n elements = elements.filter((data, index) => {\n return indices.indexOf(index) !== -1;\n });\n elements.styles(style);\n }\n compute_view_padding() {\n //This function computes the padding along the x and y directions.\n //The value is in pixels.\n const x_padding = Math.sqrt(this.model.get(\"default_size\")) / 2 + 1.0;\n if (x_padding !== this.x_padding || x_padding !== this.y_padding) {\n this.x_padding = x_padding;\n this.y_padding = x_padding;\n this.trigger(\"mark_padding_updated\");\n }\n }\n update_array(d, i) {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n if (!this.model.get(\"restrict_y\")) {\n const x = this.model.get('x').slice(); // copy\n x[i] = x_scale.invert(d[0]);\n this.model.set(\"x\", x);\n }\n if (!this.model.get(\"restrict_x\")) {\n const y = this.model.get('y').slice();\n y[i] = y_scale.invert(d[1]);\n this.model.set(\"y\", y);\n }\n this.touch();\n }\n set_drag_behavior() {\n const elements = this.d3el.selectAll(\".object_grp\");\n if (this.model.get(\"enable_move\")) {\n elements.call(this.drag_listener);\n }\n else {\n elements.on(\".drag\", null);\n }\n }\n set_drag_style(d, i, dragged_node) { }\n reset_drag_style(d, i, dragged_node) { }\n drag_start(d, i, dragged_node) {\n // d[0] and d[1] will contain the previous position (in pixels)\n // of the dragged point, for the length of the drag event\n const x_scale = this.scales.x, y_scale = this.scales.y;\n d[0] = x_scale.scale(d.x) + x_scale.offset;\n d[1] = y_scale.scale(d.y) + y_scale.offset;\n this.set_drag_style(d, i, dragged_node);\n this.send({\n event: \"drag_start\",\n point: { x: d.x, y: d.y },\n index: i\n });\n }\n on_drag(d, i, dragged_node) {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n // If restrict_x is true, then the move is restricted only to the X\n // direction.\n const restrict_x = this.model.get(\"restrict_x\"), restrict_y = this.model.get(\"restrict_y\");\n if (restrict_x && restrict_y) {\n return;\n }\n if (!restrict_y) {\n d[0] = d3GetEvent().x;\n }\n if (!restrict_x) {\n d[1] = d3GetEvent().y;\n }\n d3.select(dragged_node)\n .attr(\"transform\", () => {\n return \"translate(\" + d[0] + \",\" + d[1] + \")\";\n });\n this.send({\n event: \"drag\",\n origin: { x: d.x, y: d.y },\n point: {\n x: x_scale.invert(d[0]),\n y: y_scale.invert(d[1])\n },\n index: i\n });\n if (this.model.get(\"update_on_move\")) {\n // saving on move if flag is set\n this.update_array(d, i);\n }\n }\n drag_ended(d, i, dragged_node) {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.reset_drag_style(d, i, dragged_node);\n this.update_array(d, i);\n this.send({\n event: \"drag_end\",\n point: {\n x: x_scale.invert(d[0]),\n y: y_scale.invert(d[1])\n },\n index: i\n });\n }\n selected_deleter() {\n d3GetEvent().stopPropagation();\n return;\n }\n add_element() {\n const mouse_pos = d3.mouse(this.el);\n const curr_pos = [mouse_pos[0], mouse_pos[1]];\n const x_scale = this.scales.x, y_scale = this.scales.y;\n //add the new point to data\n const x = this.model.get('x');\n const y = this.model.get('y');\n // copy data and fill in the last value\n const xn = new x.constructor(x.length + 1);\n const yn = new y.constructor(y.length + 1);\n xn.set(x);\n yn.set(y);\n xn[x.length] = x_scale.invert(curr_pos[0]);\n yn[y.length] = y_scale.invert(curr_pos[1]);\n this.model.set(\"x\", xn);\n this.model.set(\"y\", yn);\n this.touch();\n // adding the point and saving the model automatically triggers a\n // draw which adds the new point because the data now has a new\n // point\n }\n delete_element(args) {\n const index = args.index;\n // copy data to avoid modifying in place (will not detect a change)\n let x = this.model.get(\"x\").slice();\n let y = this.model.get(\"y\").slice();\n x.copyWithin(index, index + 1, x.length);\n y.copyWithin(index, index + 1, y.length);\n x = x.slice(0, x.length - 1);\n y = y.slice(0, y.length - 1);\n this.model.set(\"x\", x);\n this.model.set(\"y\", y);\n this.touch();\n }\n}\nexports.ScatterBase = ScatterBase;\n;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlckJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2NhdHRlckJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6Qiw4QkFBNEI7QUFDNUIsZ0lBQWdJO0FBQ2hJLE1BQU0sVUFBVSxHQUFHLGNBQVcsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSxpQ0FBOEI7QUFDOUIsOENBQWdDO0FBRWhDLE1BQXNCLFdBQVksU0FBUSxXQUFJO0lBRTFDLE1BQU07UUFDRixNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUU3QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTthQUMzQixPQUFPLENBQUMsVUFBUyxDQUFNO1lBQ3BCLE9BQU8sRUFBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUM7YUFDRCxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuRSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFB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LENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztDQWlCSjtBQTVxQkQsa0NBNHFCQztBQUFBLENBQUMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass ScatterBaseModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"ScatterBaseModel\", _view_name: \"ScatterBase\", x: [], y: [], color: null, opacity: null, size: null, rotation: null, hovered_point: null, scales_metadata: {\n x: { orientation: \"horizontal\", dimension: \"x\" },\n y: { orientation: \"vertical\", dimension: \"y\" },\n color: { dimension: \"color\" },\n size: { dimension: \"size\" },\n opacity: { dimension: \"opacity\" },\n rotation: { dimension: \"rotation\" }\n }, hovered_style: {}, unhovered_style: {}, colors: ['steelblue'], default_opacities: [1.0], enable_move: false, enable_delete: false, restrict_x: false, restrict_y: false, update_on_move: false });\n }\n initialize(attributes, options) {\n // TODO: Normally, color, opacity and size should not require a redraw\n super.initialize(attributes, options);\n this.on_some_change([\"x\", \"y\", \"color\", \"opacity\", \"size\", \"rotation\"], this.update_data, this);\n // FIXME: replace this with on(\"change:preserve_domain\"). It is not done here because\n // on_some_change depends on the GLOBAL backbone on(\"change\") handler which\n // is called AFTER the specific handlers on(\"change:foobar\") and we make that\n // assumption.\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.update_data();\n }\n update_mark_data() {\n let x_data = this.get(\"x\");\n const y_data = this.get(\"y\");\n if (x_data.length === 0 || y_data.length === 0) {\n this.mark_data = [];\n }\n else {\n //FIXME:Temporary fix to avoid misleading NaN error due to X and Y\n //being of different lengths. In particular, if Y is of a smaller\n //length, throws an error on the JS side\n const min_len = Math.min(x_data.length, y_data.length);\n x_data = x_data.slice(0, min_len);\n const color = this.get(\"color\") || [], size = this.get(\"size\") || [], opacity = this.get(\"opacity\") || [], rotation = this.get(\"rotation\") || [];\n // since x_data may be a TypedArray, explicitly use Array.map\n this.mark_data = Array.prototype.map.call(x_data, function (d, i) {\n return {\n x: d,\n y: y_data[i],\n color: color[i],\n size: size[i],\n opacity: opacity[i],\n rotation: rotation[i],\n index: i\n };\n });\n }\n }\n update_data() {\n this.dirty = true;\n this.update_mark_data();\n this.update_unique_ids();\n this.update_domains();\n this.dirty = false;\n this.trigger(\"data_updated\");\n }\n update_unique_ids() { }\n get_data_dict(data, index) {\n return data;\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n // color scale needs an issue in DateScaleModel to be fixed. It\n // should be moved here as soon as that is fixed.\n const scales = this.get(\"scales\");\n for (let key in scales) {\n if (scales.hasOwnProperty(key)) {\n const scale = scales[key];\n if (!this.get(\"preserve_domain\")[key]) {\n scale.compute_and_set_domain(this.mark_data.map(function (elem) {\n return elem[key];\n }), this.model_id + key);\n }\n else {\n scale.del_domain([], this.model_id + key);\n }\n }\n }\n }\n}\nScatterBaseModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { x: serialize.array_or_json, y: serialize.array_or_json, color: serialize.array_or_json, opacity: serialize.array_or_json, size: serialize.array_or_json, rotation: serialize.array_or_json, default_opacities: serialize.array_or_json });\nexports.ScatterBaseModel = ScatterBaseModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlckJhc2VNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TY2F0dGVyQmFzZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCwyQ0FBd0M7QUFDeEMsdURBQXlDO0FBRXpDLE1BQWEsZ0JBQWlCLFNBQVEscUJBQVM7SUFFM0MsUUFBUTtRQUNKLHlCQUFXLHFCQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUN6QyxXQUFXLEVBQUUsa0JBQWtCLEVBQy9CLFVBQVUsRUFBRSxhQUFhLEVBRXpCLENBQUMsRUFBRSxFQUFFLEVBQ0wsQ0FBQyxFQUFFLEVBQUUsRUFDTCxLQUFLLEVBQUUsSUFBSSxFQUNYLE9BQU8sRUFBRSxJQUFJLEVBQ2IsSUFBSSxFQUFFLElBQUksRUFDVixRQUFRLEVBQUUsSUFBSSxFQUNkLGFBQWEsRUFBRSxJQUFJLEVBQ25CLGVBQWUsRUFBRTtnQkFDYixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2hELENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDOUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtnQkFDN0IsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtnQkFDM0IsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtnQkFDakMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTthQUN0QyxFQUNELGFBQWEsRUFBRSxFQUFFLEVBQ2pCLGVBQWUsRUFBRSxFQUFFLEVBQ25CLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUNyQixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUN4QixXQUFXLEVBQUUsS0FBSyxFQUNsQixhQUFhLEVBQUUs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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ScaleModel_1 = require(\"./ScaleModel\");\nconst _ = __importStar(require(\"underscore\"));\nclass OrdinalScaleModel extends ScaleModel_1.ScaleModel {\n defaults() {\n return Object.assign({}, ScaleModel_1.ScaleModel.prototype.defaults(), { _model_name: \"OrdinalScaleModel\", _view_name: \"OrdinalScale\", domain: [] });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n }\n set_init_state() {\n this.type = \"ordinal\";\n this.min_from_data = true;\n this.max_from_data = true;\n }\n set_listeners() {\n this.on(\"change:domain\", this.domain_changed, this);\n this.domain_changed();\n this.on(\"change:reverse\", this.reverse_changed, this);\n this.reverse_changed();\n }\n domain_changed() {\n this.ord_domain = this.get(\"domain\");\n if (this.ord_domain !== null && this.ord_domain.length !== 0) {\n this.max_from_data = false;\n this.min_from_data = false;\n this.domain = this.ord_domain.map(function (d) { return d; });\n this.trigger(\"domain_changed\");\n }\n else {\n this.max_from_data = true;\n this.min_from_data = true;\n this.domain = [];\n this.update_domain();\n }\n }\n reverse_changed(model) {\n const prev_reverse = (model === undefined) ? false : model.previous(\"reverse\");\n this.reverse = this.get(\"reverse\");\n // the domain should be reversed only if the previous value of reverse\n // is different from the current value. During init, domain should be\n // reversed only if reverse is set to True.\n const reverse_domain = (prev_reverse + this.reverse) % 2;\n if (this.domain.length > 0 && reverse_domain === 1) {\n this.domain.reverse();\n this.trigger(\"domain_changed\", this.domain);\n }\n }\n update_domain() {\n let domain = [];\n // TODO: check for hasOwnProperty\n for (let id in this.domains) {\n domain = _.union(domain, this.domains[id]);\n }\n if (this.domain.length !== domain.length ||\n (_.intersection(this.domain, domain)).length !== domain.length) {\n this.domain = domain;\n this.trigger(\"domain_changed\", domain);\n }\n }\n compute_and_set_domain(data_array, id) {\n // Takes an array and calculates the domain for the particular\n // view. If you have the domain already calculated on your side,\n // call set_domain function.\n if (!this.min_from_data && !this.max_from_data) {\n return;\n }\n if (data_array.length === 0) {\n this.set_domain([], id);\n return;\n }\n const domain = _.flatten(data_array);\n if (this.get(\"reverse\")) {\n domain.reverse();\n }\n this.set_domain(domain, id);\n }\n}\nexports.OrdinalScaleModel = OrdinalScaleModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JkaW5hbFNjYWxlTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvT3JkaW5hbFNjYWxlTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILDZDQUEwQztBQUMxQyw4Q0FBZ0M7QUFFaEMsTUFBYSxpQkFBa0IsU0FBUSx1QkFBVTtJQUU3QyxRQUFRO1FBQ0oseUJBQVcsdUJBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3RDLFdBQVcsRUFBRSxtQkFBbUIsRUFDaEMsVUFBVSxFQUFFLGNBQWMsRUFDMUIsTUFBTSxFQUFFLEVBQUUsSUFDWjtJQUNOLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBRyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxJ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","\"use strict\";\n/* Based on http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n *\n * This file is licensed under the following license:\n *\n * Copyright (c) 1970-2003, Wm. Randolph Franklin\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use, copy,\n * modify, merge, publish, distribute, sublicense, and/or sell copies\n * of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimers.\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice in the documentation and/or other materials\n * provided with the distribution.\n * 3. The name of W. Randolph Franklin may not be used to endorse or\n * promote products derived from this Software without specific prior\n * written permission.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction point_in_lasso(point, vertices) {\n // Checks if a point is in lasso\n var xi, xj, yi, yj, intersect, x = point[0], y = point[1], is_inside = false;\n for (var i = 0, j = vertices.length - 1; i < vertices.length; j = i++) {\n xi = vertices[i][0],\n yi = vertices[i][1],\n xj = vertices[j][0],\n yj = vertices[j][1],\n intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect)\n is_inside = !is_inside;\n }\n return is_inside;\n}\nexports.point_in_lasso = point_in_lasso;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFzc29fdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sYXNzb190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRzs7QUFFSCxTQUFnQixjQUFjLENBQUMsS0FBSyxFQUFFLFFBQVE7SUFDMUMsZ0NBQWdDO0lBQ2hDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFDekIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFbEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUNuRSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLElBQUksU0FBUztZQUFFLFNBQVMsR0FBRyxDQUFDLFNBQVMsQ0FBQztLQUN6QztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFkRCx3Q0FjQyJ9","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-scale\"));\nconst Scale_1 = require(\"./Scale\");\nclass ColorScale extends Scale_1.Scale {\n render() {\n this.create_d3_scale();\n this.update_extrapolation();\n if (this.model.domain.length > 0) {\n this.scale.domain(this.model.domain);\n }\n this.offset = 0;\n this.create_event_listeners();\n this.set_range();\n }\n create_d3_scale() {\n this.scale = d3.scaleLinear();\n }\n create_event_listeners() {\n super.create_event_listeners();\n this.listenTo(this.model, \"colors_changed\", this.set_range);\n this.model.on(\"change:extrapolation\", function () {\n this.update_extrapolation();\n this.trigger(\"color_scale_range_changed\");\n }, this);\n }\n update_extrapolation() {\n this.scale.clamp((this.model.get(\"extrapolation\") === \"constant\"));\n }\n set_range() {\n this.scale.range(this.model.color_range);\n this.trigger(\"color_scale_range_changed\");\n }\n}\nexports.ColorScale = ColorScale;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sb3JTY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Db2xvclNjYWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsa0RBQWtEO0FBQ2xELG1DQUFnQztBQUdoQyxNQUFhLFVBQVcsU0FBUSxhQUFLO0lBRWpDLE1BQU07UUFDRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUU7WUFDbEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUlKO0FBcENELGdDQW9DQyJ9","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _ = __importStar(require(\"underscore\"));\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-scale\"));\nconst LinearScaleModel_1 = require(\"./LinearScaleModel\");\nconst colorutils = __importStar(require(\"./ColorUtils\"));\nclass ColorScaleModel extends LinearScaleModel_1.LinearScaleModel {\n defaults() {\n return Object.assign({}, LinearScaleModel_1.LinearScaleModel.prototype.defaults(), { _model_name: \"ColorScaleModel\", _view_name: \"ColorScale\", mid: null, scheme: 'RdYlGn', extrapolation: 'constant', colors: null });\n }\n set_init_state() {\n this.type = \"color_linear\";\n this.color_range = [];\n this.mid = null;\n }\n set_listeners() {\n super.set_listeners();\n this.on_some_change([\"colors\", \"scheme\"], this.colors_changed, this);\n this.on(\"change:mid\", this.update_domain, this);\n this.colors_changed();\n }\n update_domain() {\n // Compute domain min and max\n const that = this;\n const min = (!this.min_from_data) ?\n this.min : d3.min(_.map(this.domains, function (d) {\n return d.length > 0 ? d[0] : that.global_max;\n }));\n const max = (!this.max_from_data) ?\n this.max : d3.max(_.map(this.domains, function (d) {\n return d.length > 0 ? d[d.length - 1] : that.global_min;\n }));\n const prev_mid = this.mid;\n this.mid = this.get(\"mid\");\n // If the min/mid/max has changed, or the number of colors has changed,\n // update the domain\n const prev_domain = this.domain;\n const prev_length = prev_domain.length;\n const n_colors = this.color_range.length;\n if (min != prev_domain[0] || max != prev_domain[prev_length - 1] ||\n n_colors != prev_length || this.mid != prev_mid) {\n this.domain = this.create_domain(min, this.mid, max, n_colors);\n this.trigger(\"domain_changed\", this.domain);\n }\n }\n create_domain(min, mid, max, n_colors) {\n // Domain ranges from min to max, with the same number of\n // elements as the color range\n const scale = d3.scaleLinear();\n if (mid === undefined || mid === null) {\n scale.domain([0, n_colors - 1]).range([min, max]);\n }\n else {\n const mid_index = n_colors / 2;\n scale.domain([0, mid_index, n_colors - 1]).range([min, mid, max]);\n }\n const domain = [];\n for (let i = 0; i < n_colors; i++) {\n const j = this.reverse ? n_colors - 1 - i : i;\n domain.push(this.toDomainType(scale(j)));\n }\n return domain;\n }\n colors_changed() {\n const colors = this.get(\"colors\");\n this.color_range = colors.length > 0 ? colors :\n colorutils.get_linear_scale_range(this.get(\"scheme\"));\n // If the number of colors has changed, the domain must be updated\n this.update_domain();\n // Update the range of the views. For a color scale the range doesn't depend\n // on the view, so ideally we could get rid of this\n this.trigger(\"colors_changed\");\n }\n toDomainType(value) {\n return value;\n }\n}\nexports.ColorScaleModel = ColorScaleModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sb3JTY2FsZU1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NvbG9yU2NhbGVNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsOENBQWdDO0FBQ2hDLHVDQUF5QjtBQUN6Qix1RUFBdUU7QUFDdkUseURBQXNEO0FBQ3RELHlEQUEyQztBQUUzQyxNQUFhLGVBQWdCLFNBQVEsbUNBQWdCO0lBRWpELFFBQVE7UUFDSix5QkFBVyxtQ0FBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQzVDLFdBQVcsRUFBRSxpQkFBaUIsRUFDOUIsVUFBVSxFQUFFLFlBQVksRUFDeEIsR0FBRyxFQUFFLElBQUksRUFDVCxNQUFNLEVBQUUsUUFBUSxFQUNoQixhQUFhLEVBQUUsVUFBVSxFQUN6QixNQUFNLEVBQUUsSUFBSSxJQUNkO0lBQ04sQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRUQsYUFBYTtRQUNULEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWE7UUFDVCw2QkFBNkI7UUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJ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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _ = __importStar(require(\"underscore\"));\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-selection\"), require(\"d3-shape\"), require(\"d3-transition\"));\nconst Mark_1 = require(\"./Mark\");\nconst markers = __importStar(require(\"./Markers\"));\nconst bqSymbol = markers.symbol;\nclass Lines extends Mark_1.Mark {\n render() {\n const base_render_promise = super.render();\n const that = this;\n this.dot = bqSymbol().size(this.model.get(\"marker_size\"));\n if (this.model.get(\"marker\")) {\n this.dot.type(this.model.get(\"marker\"));\n }\n // TODO: create_listeners is put inside the promise success handler\n // because some of the functions depend on child scales being\n // created. Make sure none of the event handler functions make that\n // assumption.\n this.displayed.then(function () {\n that.parent.tooltip_div.node().appendChild(that.tooltip_div.node());\n that.create_tooltip();\n });\n this.display_el_classes = [\"line\", \"legendtext\", \"dot\"];\n return base_render_promise.then(function () {\n that.event_listeners = {};\n that.process_interactions();\n that.create_listeners();\n that.compute_view_padding();\n that.draw(false);\n });\n }\n set_ranges() {\n const x_scale = this.scales.x;\n if (x_scale) {\n x_scale.set_range(this.parent.padded_range(\"x\", x_scale.model));\n }\n const y_scale = this.scales.y;\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n }\n }\n set_positional_scales() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.update_line_xy();\n }\n });\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.update_line_xy();\n }\n });\n }\n initialize_additional_scales() {\n const color_scale = this.scales.color;\n if (color_scale) {\n this.listenTo(color_scale, \"domain_changed\", function () {\n this.update_style();\n });\n color_scale.on(\"color_scale_range_changed\", this.update_style, this);\n }\n }\n create_listeners() {\n super.create_listeners();\n this.d3el.on(\"mouseover\", _.bind(function () { this.event_dispatcher(\"mouse_over\"); }, this))\n .on(\"mousemove\", _.bind(function () { this.event_dispatcher(\"mouse_move\"); }, this))\n .on(\"mouseout\", _.bind(function () { this.event_dispatcher(\"mouse_out\"); }, this));\n this.listenTo(this.model, \"change:tooltip\", this.create_tooltip);\n // FIXME: multiple calls to update_path_style. Use on_some_change.\n this.listenTo(this.model, \"change:interpolation\", this.update_path_style);\n this.listenTo(this.model, \"change:close_path\", this.update_path_style);\n // FIXME: multiple calls to update_style. Use on_some_change.\n this.listenTo(this.model, \"change:colors\", this.update_style);\n this.listenTo(this.model, \"change:opacities\", this.update_style);\n this.listenTo(this.model, \"change:fill_opacities\", this.update_style);\n this.listenTo(this.model, \"change:fill_colors\", this.update_style);\n this.listenTo(this.model, \"change:fill\", this.update_fill);\n this.listenTo(this.model, \"data_updated\", function () {\n const animate = true;\n this.draw(animate);\n });\n this.listenTo(this.model, \"labels_updated\", this.update_labels);\n this.listenTo(this.model, \"change:stroke_width\", this.update_stroke_width);\n this.listenTo(this.model, \"change:labels_visibility\", this.update_legend_labels);\n this.listenTo(this.model, \"change:curves_subset\", this.update_curves_subset);\n this.listenTo(this.model, \"change:line_style\", this.update_line_style);\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n this.listenTo(this.parent, \"bg_clicked\", function () {\n this.event_dispatcher(\"parent_clicked\");\n });\n this.listenTo(this.model, \"change:marker\", this.update_marker);\n this.listenTo(this.model, \"change:marker_size\", this.update_marker_size);\n }\n update_legend_labels() {\n if (this.model.get(\"labels_visibility\") === \"none\") {\n this.d3el.selectAll(\".legend\")\n .attr(\"display\", \"none\");\n this.d3el.selectAll(\".curve_label\")\n .attr(\"display\", \"none\");\n }\n else if (this.model.get(\"labels_visibility\") === \"label\") {\n this.d3el.selectAll(\".legend\")\n .attr(\"display\", \"none\");\n this.d3el.selectAll(\".curve_label\")\n .attr(\"display\", \"inline\");\n }\n else {\n this.d3el.selectAll(\".legend\")\n .attr(\"display\", \"inline\");\n this.d3el.selectAll(\".curve_label\")\n .attr(\"display\", \"none\");\n }\n }\n update_labels() {\n this.d3el.selectAll(\".curve\")\n .data(this.model.mark_data)\n .select(\".curve_label\")\n .text(function (d) { return d.name; });\n }\n get_line_style() {\n switch (this.model.get(\"line_style\")) {\n case \"solid\":\n return \"none\";\n case \"dashed\":\n return \"10,10\";\n case \"dotted\":\n return \"2,10\";\n case \"dash_dotted\":\n return \"10,5,2,5\";\n }\n }\n // Updating the style of the curve, stroke, colors, dashed etc...\n // Could be fused in a single function for increased readability\n // and to avoid code repetition\n update_line_style() {\n this.d3el.selectAll(\".curve\").select(\".line\")\n .style(\"stroke-dasharray\", _.bind(this.get_line_style, this));\n if (this.legend_el) {\n this.legend_el.select(\"path\")\n .style(\"stroke-dasharray\", _.bind(this.get_line_style, this));\n }\n }\n update_stroke_width(model, stroke_width) {\n this.compute_view_padding();\n this.d3el.selectAll(\".curve\").select(\".line\")\n .style(\"stroke-width\", stroke_width);\n if (this.legend_el) {\n this.legend_el.select(\"path\")\n .style(\"stroke-width\", stroke_width);\n }\n }\n update_style() {\n const that = this, fill = this.model.get(\"fill\"), fill_color = this.model.get(\"fill_colors\"), opacities = this.model.get(\"opacities\"), fill_opacities = this.model.get(\"fill_opacities\");\n // update curve colors\n const curves = this.d3el.selectAll(\".curve\");\n curves.select(\".line\")\n .style(\"opacity\", function (d, i) { return opacities[i]; })\n .style(\"stroke\", function (d, i) {\n return that.get_element_color(d, i) || fill_color[i];\n })\n .style(\"fill\", function (d, i) {\n return fill === \"inside\" ? that.get_fill_color(d, i) : \"\";\n })\n .style(\"fill-opacity\", function (d, i) {\n return fill === \"inside\" ? fill_opacities[i] : \"\";\n });\n curves.select(\".area\")\n .style(\"fill\", function (d, i) { return that.get_fill_color(d, i); })\n .style(\"opacity\", function (d, i) { return fill_opacities[i]; });\n this.update_marker_style();\n // update legend style\n if (this.legend_el) {\n this.legend_el.select(\".line\")\n .style(\"stroke\", function (d, i) {\n return that.get_element_color(d, i) || fill_color[i];\n })\n .style(\"opacity\", function (d, i) { return opacities[i]; })\n .style(\"fill\", function (d, i) {\n return that.model.get(\"fill\") === \"none\" ?\n \"\" : that.get_fill_color(d, i);\n });\n this.legend_el.select(\".dot\")\n .style(\"stroke\", function (d, i) {\n return that.get_element_color(d, i) || fill_color[i];\n })\n .style(\"opacity\", function (d, i) { return opacities[i]; })\n .style(\"fill\", function (d, i) {\n return that.get_element_color(d, i) || fill_color[i];\n });\n this.legend_el.select(\"text\")\n .style(\"fill\", function (d, i) {\n return that.get_element_color(d, i) || fill_color[i];\n })\n .style(\"opacity\", function (d, i) {\n return opacities[i];\n });\n }\n this.update_stroke_width(this.model, this.model.get(\"stroke_width\"));\n this.update_line_style();\n }\n path_closure() {\n return this.model.get(\"close_path\") ? \"Z\" : \"\";\n }\n update_path_style() {\n const interpolation = this.get_interpolation();\n this.line.curve(interpolation);\n this.area.curve(interpolation);\n const that = this;\n this.d3el.selectAll(\".curve\").select(\".line\")\n .attr(\"d\", function (d) {\n return that.line(d.values) + that.path_closure();\n });\n this.d3el.selectAll(\".curve\").select(\".area\")\n .transition(\"update_path_style\")\n .duration(0) //FIXME\n .attr(\"d\", function (d) { return that.area(d.values); });\n if (this.legend_el) {\n this.legend_line.curve(interpolation);\n this.legend_el.selectAll(\"path\")\n .attr(\"d\", this.legend_line(this.legend_path_data) + this.path_closure());\n }\n }\n relayout() {\n this.set_ranges();\n this.update_line_xy(false);\n }\n selector_changed(point_selector, rect_selector) {\n if (point_selector === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return [];\n }\n const pixels = this.pixel_coords;\n const indices = new Uint32Array(_.range(pixels.length));\n const selected = indices.filter(index => {\n return point_selector(pixels[index]);\n });\n this.model.set(\"selected\", selected);\n this.touch();\n }\n invert_point(pixel) {\n if (pixel === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return;\n }\n const index = Math.min(this.bisect(this.x_pixels, pixel), Math.max((this.x_pixels.length - 1), 0));\n this.model.set(\"selected\", new Uint32Array([index]));\n this.touch();\n }\n update_multi_range(brush_extent) {\n const x_start = brush_extent[0];\n const x_end = brush_extent[1];\n const data = this.model.x_data[0] instanceof Array ?\n this.model.x_data[0] : this.model.x_data;\n const idx_start = this.bisect(data, x_start);\n const idx_end = Math.min(this.bisect(data, x_end), Math.max((data.length - 1), 0));\n this.selector_model.set(\"selected\", [idx_start, idx_end]);\n this.selector.touch();\n }\n draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) {\n const curve_labels = this.model.get_labels();\n const legend_data = this.model.mark_data.map(function (d) {\n return { index: d.index, name: d.name, color: d.color };\n });\n this.legend_el = elem.selectAll(\".legend\" + this.uuid)\n .data(legend_data);\n const that = this, rect_dim = inter_y_disp * 0.8, fill_colors = this.model.get(\"fill_colors\"), opacities = this.model.get(\"opacities\");\n this.legend_line = d3.line()\n .curve(this.get_interpolation())\n .x(function (d) { return d[0]; })\n .y(function (d) { return d[1]; });\n this.legend_path_data = [[0, rect_dim],\n [rect_dim / 2, 0],\n [rect_dim, rect_dim / 2]];\n const legend = this.legend_el.enter()\n .append(\"g\")\n .attr(\"class\", \"legend\" + this.uuid)\n .attr(\"transform\", function (d, i) {\n return \"translate(0, \" + (i * inter_y_disp + y_disp) + \")\";\n })\n .on(\"mouseover\", _.bind(function () {\n this.event_dispatcher(\"legend_mouse_over\");\n }, this))\n .on(\"mouseout\", _.bind(function () {\n this.event_dispatcher(\"legend_mouse_out\");\n }, this))\n .on(\"click\", _.bind(function () {\n this.event_dispatcher(\"legend_clicked\");\n }, this));\n legend.append(\"path\")\n .attr(\"class\", \"line\")\n .attr(\"fill\", \"none\")\n .attr(\"d\", this.legend_line(this.legend_path_data) + this.path_closure())\n .style(\"stroke\", function (d, i) {\n return that.get_element_color(d, i) || fill_colors[i];\n })\n .style(\"fill\", function (d, i) {\n return that.model.get(\"fill\") === \"none\" ?\n \"\" : that.get_fill_color(d, i);\n })\n .style(\"opacity\", function (d, i) { return opacities[i]; })\n .style(\"stroke-width\", this.model.get(\"stroke_width\"))\n .style(\"stroke-dasharray\", _.bind(this.get_line_style, this));\n if (this.model.get(\"marker\")) {\n legend.append(\"path\")\n .attr(\"class\", \"dot\")\n .attr(\"transform\", \"translate(\" + rect_dim / 2 + \",0)\")\n .attr(\"d\", that.dot.size(25))\n .style(\"fill\", function (d, i) { return that.get_element_color(d, i); });\n }\n legend.append(\"text\")\n .attr(\"class\", \"legendtext\")\n .attr(\"x\", rect_dim * 1.2)\n .attr(\"y\", rect_dim / 2)\n .attr(\"dy\", \"0.35em\")\n .text(function (d, i) { return curve_labels[i]; })\n .style(\"fill\", function (d, i) {\n return that.get_element_color(d, i) || fill_colors[i];\n })\n .style(\"opacity\", function (d, i) { return opacities[i]; });\n legend.merge(this.legend_el);\n const max_length = d3.max(curve_labels, function (d) {\n return d.length;\n });\n this.legend_el.exit().remove();\n return [this.model.mark_data.length, max_length];\n }\n update_curves_subset() {\n const display_labels = this.model.get(\"labels_visibility\") === \"label\";\n // Show a subset of the curves\n const curves_subset = this.model.get(\"curves_subset\");\n if (curves_subset.length > 0) {\n this.d3el.selectAll(\".curve\")\n .attr(\"display\", function (d, i) {\n return curves_subset.indexOf(i) !== -1 ?\n \"inline\" : \"none\";\n })\n .select(\".curve_label\")\n .attr(\"display\", function (d, i) {\n return (curves_subset.indexOf(i) !== -1 && display_labels) ?\n \"inline\" : \"none\";\n });\n if (this.legend_el) {\n this.legend_el\n .attr(\"display\", function (d, i) {\n return curves_subset.indexOf(i) !== -1 ?\n \"inline\" : \"none\";\n });\n }\n this.d3el.selectAll(\".curve\");\n }\n else { //make all curves visible\n this.d3el.selectAll(\".curve\")\n .attr(\"display\", \"inline\")\n .select(\".curve_label\")\n .attr(\"display\", function (d) {\n return display_labels ? \"inline\" : \"none\";\n });\n if (this.legend_el) {\n this.legend_el.attr(\"display\", \"inline\");\n }\n }\n }\n update_fill() {\n const fill = this.model.get(\"fill\"), area = (fill === \"top\" || fill === \"bottom\" || fill === \"between\");\n const y_scale = this.scales.y;\n this.area.defined(function (d) { return area && d.y !== null && isFinite(y_scale.scale(d.y)); });\n if (fill == \"bottom\") {\n this.area.y0(this.parent.plotarea_height);\n }\n else if (fill == \"top\") {\n this.area.y0(0);\n }\n else if (fill == \"between\") {\n this.area.y0(function (d) { return y_scale.scale(d.y0) + y_scale.offset; });\n }\n const that = this;\n this.d3el.selectAll(\".curve\").select(\".area\")\n .attr(\"d\", function (d) {\n return that.area(d.values);\n });\n this.d3el.selectAll(\".curve\").select(\".line\")\n .style(\"fill\", function (d, i) {\n return fill === \"inside\" ? that.get_fill_color(d, i) : \"\";\n });\n // update legend fill\n if (this.legend_el) {\n this.legend_el.select(\"path\")\n .style(\"fill\", function (d, i) {\n return fill === \"none\" ? \"\" : that.get_fill_color(d, i);\n });\n }\n }\n get_element_color(data, index) {\n const color_scale = this.scales.color;\n if (color_scale && data.color !== undefined && data.color !== null) {\n return color_scale.scale(data.color);\n }\n return this.get_colors(index);\n }\n get_fill_color(data, index) {\n const fill_colors = this.model.get(\"fill_colors\");\n const that = this;\n return fill_colors.length === 0 ?\n that.get_element_color(data, index) : fill_colors[index];\n }\n update_line_xy(animate) {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n this.line\n .x(function (d) { return x_scale.scale(d.x) + x_scale.offset; })\n .y(function (d) { return y_scale.scale(d.y) + y_scale.offset; });\n const fill = this.model.get(\"fill\");\n this.area\n .x(function (d) { return x_scale.scale(d.x) + x_scale.offset; })\n .y1(function (d) { return y_scale.scale(d.y) + y_scale.offset; });\n if (fill == \"bottom\") {\n this.area.y0(this.parent.plotarea_height);\n }\n else if (fill == \"top\") {\n this.area.y0(0);\n }\n else if (fill == \"between\") {\n this.area.y0(function (d) { return y_scale.scale(d.y0) + y_scale.offset; });\n }\n const that = this;\n const curves_sel = this.d3el.selectAll(\".curve\");\n curves_sel.select(\".line\")\n .transition(\"update_line_xy\")\n .attr(\"d\", function (d) {\n return that.line(d.values) + that.path_closure();\n })\n .duration(animation_duration);\n curves_sel.select(\".area\")\n .transition(\"update_line_xy\")\n .attr(\"d\", function (d, i) {\n return that.area(d.values);\n })\n .duration(animation_duration);\n curves_sel.select(\".curve_label\")\n .transition(\"update_line_xy\")\n .attr(\"transform\", function (d) {\n const last_xy = d.values[d.values.length - 1];\n return \"translate(\" + x_scale.scale(last_xy.x) +\n \",\" + y_scale.scale(last_xy.y) + \")\";\n })\n .duration(animation_duration);\n this.update_dots_xy(animate);\n this.x_pixels = (this.model.mark_data.length > 0) ? this.model.mark_data[0].values.map(function (el) { return x_scale.scale(el.x) + x_scale.offset; })\n : [];\n this.y_pixels = (this.model.mark_data.length > 0) ? this.model.mark_data[0].values.map(function (el) { return y_scale.scale(el.y) + y_scale.offset; })\n : [];\n this.pixel_coords = (this.model.mark_data.length > 0) ?\n this.model.mark_data[0].values.map(function (el) {\n return [x_scale.scale(el.x) + x_scale.offset, y_scale.scale(el.y) + y_scale.offset];\n }) : [];\n }\n get_interpolation() {\n const curve_types = {\n linear: d3.curveLinear,\n basis: d3.curveBasis,\n cardinal: d3.curveCardinal,\n monotone: d3.curveMonotoneY\n };\n return curve_types[this.model.get(\"interpolation\")];\n }\n draw(animate) {\n this.set_ranges();\n const curves_sel = this.d3el.selectAll(\".curve\")\n .data(this.model.mark_data);\n const y_scale = this.scales.y;\n const new_curves = curves_sel.enter().append(\"g\")\n .attr(\"class\", \"curve\");\n new_curves.append(\"path\")\n .attr(\"class\", \"line\")\n .attr(\"fill\", \"none\");\n new_curves.append(\"path\")\n .attr(\"class\", \"area\");\n new_curves.append(\"text\")\n .attr(\"class\", \"curve_label\")\n .attr(\"x\", 3)\n .attr(\"dy\", \".35em\")\n .attr(\"display\", this.model.get(\"labels_visibility\") !== \"label\" ?\n \"none\" : \"inline\")\n .text(function (d) { return d.name; });\n const fill = this.model.get(\"fill\"), area = (fill === \"top\" || fill === \"bottom\" || fill === \"between\");\n curves_sel.select(\".line\")\n .attr(\"id\", function (d, i) { return \"curve\" + (i + 1); })\n .on(\"click\", _.bind(function () {\n this.event_dispatcher(\"element_clicked\");\n }, this));\n this.draw_dots();\n this.line = d3.line()\n .curve(this.get_interpolation())\n .defined(function (d) { return d.y !== null && isFinite(y_scale.scale(d.y)); });\n this.area = d3.area()\n .curve(this.get_interpolation())\n .defined(function (d) { return area && d.y !== null && isFinite(y_scale.scale(d.y)); });\n // Having a transition on exit is complicated. Please refer to\n // Scatter.js for detailed explanation.\n curves_sel.exit().remove();\n this.update_line_xy(animate);\n this.update_style();\n // alter the display only if a few of the curves are visible\n this.update_curves_subset();\n }\n draw_dots() {\n if (this.model.get(\"marker\")) {\n const dots = this.d3el.selectAll(\".curve\").selectAll(\".dot\")\n .data(function (d, i) {\n return d.values.map(function (e) {\n return { x: e.x, y: e.y, sub_index: e.sub_index };\n });\n });\n dots.enter().append(\"path\").attr(\"class\", \"dot\");\n dots.exit().remove();\n }\n }\n update_dots_xy(animate) {\n if (this.model.get(\"marker\")) {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n const dots = this.d3el.selectAll(\".curve\").selectAll(\".dot\");\n dots.transition(\"update_dots_xy\").duration(animation_duration)\n .attr(\"transform\", function (d) {\n return \"translate(\" + (x_scale.scale(d.x) + x_scale.offset) +\n \",\" + (y_scale.scale(d.y) + y_scale.offset) + \")\";\n })\n .attr(\"d\", this.dot.size(this.model.get(\"marker_size\"))\n .type(this.model.get(\"marker\")));\n }\n }\n compute_view_padding() {\n //This function sets the padding for the view through the variables\n //x_padding and y_padding which are view specific paddings in pixel\n let x_padding;\n if (this.model.get(\"marker\")) {\n const marker_padding = Math.sqrt(this.model.get(\"marker_size\")) / 2 + 1.0;\n const line_padding = this.model.get(\"stroke_width\") / 2.0;\n x_padding = Math.max(marker_padding, line_padding);\n }\n else {\n x_padding = this.model.get(\"stroke_width\") / 2.0;\n }\n const y_padding = x_padding;\n if (x_padding !== this.x_padding || y_padding !== this.y_padding) {\n this.x_padding = x_padding;\n this.y_padding = y_padding;\n this.trigger(\"mark_padding_updated\");\n }\n }\n update_marker_style() {\n const that = this;\n const fill_color = this.model.get(\"fill_colors\");\n const opacities = this.model.get(\"opacities\");\n this.d3el.selectAll(\".curve\").each(function (d, i) {\n const curve = d3.select(this);\n curve.selectAll(\".dot\")\n .style(\"opacity\", opacities[i])\n .style(\"fill\", that.get_element_color(d, i) || fill_color[i]);\n });\n }\n update_marker(model, marker) {\n if (marker) {\n this.draw_dots();\n this.update_dots_xy(false);\n this.update_marker_style();\n if (this.legend_el) {\n this.legend_el.select(\".dot\").attr(\"d\", this.dot.type(marker).size(25));\n }\n }\n else {\n this.d3el.selectAll(\".dot\").remove();\n if (this.legend_el) {\n this.legend_el.select(\".dot\").attr(\"d\", this.dot.size(0));\n }\n }\n }\n update_marker_size(model, marker_size) {\n this.compute_view_padding();\n this.d3el.selectAll(\".dot\").attr(\"d\", this.dot.size(marker_size));\n }\n clear_style(style_dict, indices) {\n }\n set_default_style(indices) {\n }\n set_style_on_elements(style, indices) {\n }\n}\nexports.Lines = Lines;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTGluZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILDhDQUFnQztBQUNoQyx1Q0FBeUI7QUFDekIsMEhBQTBIO0FBQzFILGlDQUE4QjtBQUU5QixtREFBcUM7QUFFckMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUVoQyxNQUFhLEtBQU0sU0FBUSxXQUFJO0lBRTNCLE1BQU07UUFDRixNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDM0M7UUFFRCxtRUFBbUU7UUFDbkUsNkRBQTZEO1FBQzdELG1FQUFtRTtRQUNuRSxjQUFjO1FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxD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LENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBUyxFQUFFLElBQ3BDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBUyxFQUFFLElBQ3BDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVMsRUFBRTtnQkFDMUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFF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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\n// var d3 =Object.assign({}, require(\"d3-selection\"), require(\"d3-selection-multi\"));\nconst _ = __importStar(require(\"underscore\"));\nconst popperreference = __importStar(require(\"./PopperReference\"));\nconst popper_js_1 = __importDefault(require(\"popper.js\"));\nconst THREE = __importStar(require(\"three\"));\nTHREE.ShaderChunk['scales'] = require('raw-loader!../shaders/scales.glsl').default;\n;\nclass Figure extends widgets.DOMWidgetView {\n constructor() {\n super(...arguments);\n this.relayoutRequested = false;\n }\n initialize() {\n // Internet Explorer does not support classList for svg elements\n this.el.classList.add(\"bqplot\");\n this.el.classList.add(\"figure\");\n this.el.classList.add(\"jupyter-widgets\");\n this.change_theme();\n const svg = document.createElementNS(d3.namespaces.svg, \"svg\");\n svg.classList.add(\"svg-figure\");\n this.svg = d3.select(svg);\n const svg_background = document.createElementNS(d3.namespaces.svg, \"svg\");\n svg_background.classList.add(\"svg-background\");\n this.svg_background = d3.select(svg_background);\n this.el.appendChild(svg_background);\n this.el.appendChild(svg);\n // For testing we need to know when the mark_views is created, the tests\n // can wait for this promise.\n this._initial_marks_created = new Promise((resolve) => {\n this._initial_marks_created_resolve = resolve;\n });\n super.initialize.apply(this, arguments);\n }\n getFigureSize() {\n const figureSize = this.el.getBoundingClientRect();\n const clientRectRatio = figureSize.width / figureSize.height;\n const minRatio = this.model.get('min_aspect_ratio');\n const maxRatio = this.model.get('max_aspect_ratio');\n if (clientRectRatio < minRatio) {\n // Too much vertical space: Keep horizontal space but compute height from min aspect ratio\n figureSize.height = figureSize.width / minRatio;\n }\n else if (clientRectRatio > maxRatio) {\n // Too much horizontal space: Keep vertical space but compute width from max aspect ratio\n figureSize.width = figureSize.height * maxRatio;\n }\n return figureSize;\n }\n render() {\n // we cannot use Promise.all here, since this.layoutPromise is resolved, and will be overwritten later on\n this.displayed.then(() => {\n // make sure we render after all layouts styles are set, since they can affect the size\n this.layoutPromise.then(this.renderImpl.bind(this));\n });\n }\n renderImpl() {\n const figureSize = this.getFigureSize();\n this.width = figureSize.width;\n this.height = figureSize.height;\n this.id = widgets.uuid();\n // Dictionary which contains the mapping for each of the marks id\n // to it's padding. Dictionary is required to not recompute\n // everything when a mark is removed.\n this.x_pad_dict = {};\n this.y_pad_dict = {};\n // this is the net padding in pixel to be applied to the x and y.\n // If there is no restriction on the plottable area of the figure,\n // then these two variables are the maximum of the values in the\n // corresponding variables x_pad_dict, y_pad_dict.\n this.x_padding_arr = {};\n this.y_padding_arr = {};\n this.figure_padding_x = this.model.get(\"padding_x\");\n this.figure_padding_y = this.model.get(\"padding_y\");\n this.clip_id = \"clip_path_\" + this.id;\n this.margin = this.model.get(\"fig_margin\");\n this.update_plotarea_dimensions();\n // we hide it when the plot area is too small\n if ((this.plotarea_width < 1) || (this.plotarea_width < 1)) {\n this.el.style.visibility = \"hidden\";\n }\n else {\n this.el.style.visibility = \"\";\n }\n // this.fig is the top <g> element to be impacted by a rescaling / change of margins\n this.fig = this.svg.append(\"g\")\n .attr(\"transform\", \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\");\n this.fig_background = this.svg_background.append(\"g\")\n .attr(\"transform\", \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\");\n this.tooltip_div = d3.select(document.createElement(\"div\"))\n .attr(\"class\", \"tooltip_div\");\n this.popper_reference = new popperreference.PositionReference({ x: 0, y: 0, width: 20, height: 20 });\n this.popper = new popper_js_1.default(this.popper_reference, this.tooltip_div.node(), {\n placement: 'auto',\n });\n this.bg = this.fig_background.append(\"rect\")\n .attr(\"class\", \"plotarea_background\")\n .attr(\"x\", 0).attr(\"y\", 0)\n .attr(\"width\", this.plotarea_width)\n .attr(\"height\", this.plotarea_height)\n .styles(this.model.get(\"background_style\"))\n .style(\"pointer-events\", \"inherit\");\n this.bg_events = this.fig.append(\"rect\")\n .attr(\"class\", \"plotarea_events\")\n .attr(\"x\", 0).attr(\"y\", 0)\n .attr(\"width\", this.plotarea_width)\n .attr(\"height\", this.plotarea_height)\n .style(\"pointer-events\", \"inherit\");\n this.bg_events.on(\"click\", () => { this.trigger(\"bg_clicked\"); });\n this.fig_axes = this.fig_background.append(\"g\");\n this.fig_marks = this.fig.append(\"g\");\n this.interaction = this.fig.append(\"g\");\n /*\n * The following was the structure of the DOM element constructed\n *\n <div class=\"bqplot figure jupyter-widgets\">\n <svg>\n <g class=\"svg-figure\" transform=\"margin translation\">\n <g class=\"svg-axes\"></g>\n <g class=\"svg-marks\"></g>\n <g class=\"svg-interaction\"></g>\n </g>\n </svg>\n </div>\n\n To allow the main/interaction layer on top, and also allowing us to draw\n on top of the canvas (e.g. selectors), we create a new DOM structure.\n When creating a screenshot/image, we collapse all this into one svg.\n\n <div class=\"bqplot figure jupyter-widgets\">\n <svg class=\"svg-background\">\n <g transform=\"margin translation\">\n <g class=\"svg-axes\"></g>\n </g>\n </svg>\n <canvas>\n </canvas>\n <svg class=\"svg-figure\">\n <g transform=\"margin translation\">\n <g class=\"svg-marks\"></g>\n <g class=\"svg-interaction\"></g>\n </g>\n </svg>\n </div>\n */\n this.clip_path = this.svg.append(\"svg:defs\")\n .append(\"svg:clipPath\")\n .attr(\"id\", this.clip_id)\n .append(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", this.plotarea_width)\n .attr(\"height\", this.plotarea_height);\n this.title = this.fig.append(\"text\")\n .attr(\"class\", \"mainheading\")\n .attr(\"x\", 0.5 * (this.plotarea_width))\n .attr(\"y\", -(this.margin.top / 2.0))\n .attr(\"dy\", \"1em\")\n .styles(this.model.get(\"title_style\"));\n this.title.text(this.model.get(\"title\"));\n // TODO: remove the save png event mechanism.\n this.model.on(\"save_png\", this.save_png, this);\n this.model.on(\"save_svg\", this.save_svg, this);\n const figure_scale_promise = this.create_figure_scales();\n return figure_scale_promise.then(() => {\n this.mark_views = new widgets.ViewList(this.add_mark, this.remove_mark, this);\n const mark_views_updated = this.mark_views.update(this.model.get(\"marks\")).then((views) => {\n this.replace_dummy_nodes(views);\n this.update_marks(views);\n this.update_legend();\n // Update Interaction layer\n // This has to be done after the marks are created\n this.set_interaction(this.model.get(\"interaction\"));\n this._initial_marks_created_resolve();\n this.update_gl();\n });\n this.axis_views = new widgets.ViewList(this.add_axis, null, this);\n const axis_views_updated = this.axis_views.update(this.model.get(\"axes\"));\n // TODO: move to the model\n this.model.on_some_change([\"fig_margin\", \"min_aspect_ratio\", \"max_aspect_ratio\"], this.relayout, this);\n this.model.on_some_change([\"padding_x\", \"padding_y\"], () => {\n this.figure_padding_x = this.model.get(\"padding_x\");\n this.figure_padding_y = this.model.get(\"padding_y\");\n this.trigger(\"margin_updated\");\n }, this);\n this.model.on(\"change:axes\", (model, value, options) => {\n this.axis_views.update(value);\n }, this);\n this.model.on(\"change:marks\", (model, value, options) => {\n this.mark_views.update(value).then((views) => {\n this.replace_dummy_nodes(views);\n this.update_marks(views);\n this.update_legend();\n this.update_gl();\n });\n }, this);\n this.model.on(\"change:legend_location\", this.update_legend, this);\n this.model.on(\"change:title\", this.update_title, this);\n this.model.on(\"change:interaction\", (model, value) => {\n Promise.all(this.mark_views.views).then((views) => {\n // Like above:\n // This has to be done after the marks are created\n this.set_interaction(value);\n });\n }, this);\n document.body.appendChild(this.tooltip_div.node());\n this.create_listeners();\n // In the classic notebook, we should relayout the figure on\n // resize of the main window.\n this.debouncedRelayout = _.debounce(() => {\n this.relayout();\n }, 300);\n window.addEventListener('resize', this.debouncedRelayout);\n this.once('remove', () => {\n window.removeEventListener('resize', this.debouncedRelayout);\n });\n return Promise.all([mark_views_updated, axis_views_updated]);\n });\n }\n createWebGLRenderer() {\n // a shared webgl context for all marks\n if (!this.renderer) {\n this.renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true, premultipliedAlpha: true });\n this.renderer.setSize(100, 100);\n this.renderer.setClearAlpha(0);\n this.renderer.setPixelRatio(this.model.get('pixel_ratio') || window.devicePixelRatio);\n }\n if (this.renderer && !this.el.contains(this.renderer.domElement)) {\n this.el.insertBefore(this.renderer.domElement, this.el.childNodes[1]);\n }\n this.layout_webgl_canvas();\n }\n replace_dummy_nodes(views) {\n _.each(views, function (view) {\n if (view.dummy_node !== null) {\n view.dummy_node.parentNode.replaceChild(view.el, view.dummy_node);\n view.dummy_node = null;\n this.displayed.then(function () {\n view.trigger(\"displayed\");\n });\n }\n }, this);\n }\n create_listeners() {\n this.listenTo(this.model, \"change:title_style\", this.title_style_updated);\n this.listenTo(this.model, \"change:background_style\", this.background_style_updated);\n this.listenTo(this.model, \"change:layout\", this.change_layout);\n this.listenTo(this.model, \"change:legend_style\", this.legend_style_updated);\n this.listenTo(this.model, \"change:legend_text\", this.legend_text_updated);\n this.listenTo(this.model, \"change:pixel_ratio\", () => {\n if (this.renderer) {\n this.renderer.setPixelRatio(this.model.get('pixel_ratio') || window.devicePixelRatio);\n this.update_gl();\n }\n });\n this.listenTo(this.model, \"change:theme\", this.change_theme);\n }\n title_style_updated() {\n this.title.styles(this.model.get(\"title_style\"));\n }\n background_style_updated() {\n this.bg.styles(this.model.get(\"background_style\"));\n }\n legend_style_updated() {\n this.fig_marks.selectAll(\".g_legend\").selectAll(\".axis\").selectAll(\"rect\")\n .styles(this.model.get(\"legend_style\"));\n }\n legend_text_updated() {\n this.fig_marks.selectAll(\".g_legend\").selectAll(\"text.legendtext\")\n .styles(this.model.get(\"legend_text\"));\n }\n create_figure_scales() {\n // Creates the absolute scales for the figure: default domain is [0,1], range is [0,width] and [0,height].\n // See the scale_x and scale_y attributes of the python Figure\n const that = this;\n const x_scale_promise = this.create_child_view(this.model.get(\"scale_x\"))\n .then(function (view) {\n that.scale_x = view;\n that.scale_x.scale.clamp(true);\n that.scale_x.set_range([0, that.plotarea_width]);\n });\n const y_scale_promise = this.create_child_view(this.model.get(\"scale_y\"))\n .then(function (view) {\n that.scale_y = view;\n that.scale_y.scale.clamp(true);\n that.scale_y.set_range([that.plotarea_height, 0]);\n });\n return Promise.all([x_scale_promise, y_scale_promise]);\n }\n padded_range(direction, scale_model) {\n // Functions to be called by mark which respects padding.\n // Typically all marks do this. Axis do not do this.\n // Also, if a mark does not set the domain, it can potentially call\n // the unpadded ranges.\n if (!scale_model.get(\"allow_padding\")) {\n return this.range(direction);\n }\n const scale_id = scale_model.model_id;\n if (direction === \"x\") {\n const scale_padding = (this.x_padding_arr[scale_id] !== undefined) ?\n this.x_padding_arr[scale_id] : 0;\n const fig_padding = (this.plotarea_width) * this.figure_padding_x;\n return [(fig_padding + scale_padding), (this.plotarea_width - fig_padding - scale_padding)];\n }\n else if (direction === \"y\") {\n const scale_padding = (this.y_padding_arr[scale_id] !== undefined) ?\n this.y_padding_arr[scale_id] : 0;\n const fig_padding = (this.plotarea_height) * this.figure_padding_y;\n return [this.plotarea_height - scale_padding - fig_padding, scale_padding + fig_padding];\n }\n }\n range(direction) {\n if (direction === \"x\") {\n return [0, this.plotarea_width];\n }\n else if (direction === \"y\") {\n return [this.plotarea_height, 0];\n }\n }\n get_mark_plotarea_height(scale_model) {\n if (!(scale_model.get(\"allow_padding\"))) {\n return this.plotarea_height;\n }\n const scale_id = scale_model.model_id;\n const scale_padding = (this.y_padding_arr[scale_id] !== undefined) ?\n this.y_padding_arr[scale_id] : 0;\n return (this.plotarea_height) * (1 - this.figure_padding_y) - scale_padding - scale_padding;\n }\n get_mark_plotarea_width(scale_model) {\n if (!(scale_model.get(\"allow_padding\"))) {\n return this.plotarea_width;\n }\n const scale_id = scale_model.model_id;\n const scale_padding = (this.x_padding_arr[scale_id] !== undefined) ?\n this.x_padding_arr[scale_id] : 0;\n return (this.plotarea_width) * (1 - this.figure_padding_x) - scale_padding - scale_padding;\n }\n add_axis(model) {\n // Called when an axis is added to the axes list.\n const that = this;\n return this.create_child_view(model)\n .then(function (view) {\n that.fig_axes.node().appendChild(view.el);\n that.displayed.then(function () {\n view.trigger(\"displayed\");\n });\n return view;\n });\n }\n remove_from_padding_dict(dict, mark_view, scale_model) {\n if (scale_model === undefined || scale_model === null) {\n return;\n }\n const scale_id = scale_model.model_id;\n if (dict[scale_id] !== undefined) {\n delete dict[scale_id][mark_view.model.model_id + \"_\" + mark_view.cid];\n if (Object.keys(dict[scale_id]).length === 0) {\n delete dict[scale_id];\n }\n }\n }\n update_padding_dict(dict, mark_view, scale_model, value) {\n const scale_id = scale_model.model_id;\n if (!(dict[scale_id])) {\n dict[scale_id] = {};\n }\n dict[scale_id][mark_view.model.model_id + \"_\" + mark_view.cid] = value;\n }\n mark_scales_updated(view) {\n const model = view.model;\n const prev_scale_models = model.previous(\"scales\");\n this.remove_from_padding_dict(this.x_pad_dict, view, prev_scale_models[model.get_key_for_orientation(\"horizontal\")]);\n this.remove_from_padding_dict(this.y_pad_dict, view, prev_scale_models[model.get_key_for_orientation(\"vertical\")]);\n const scale_models = model.get(\"scales\");\n this.update_padding_dict(this.x_pad_dict, view, scale_models[model.get_key_for_orientation(\"horizontal\")], view.x_padding);\n this.update_padding_dict(this.y_pad_dict, view, scale_models[model.get_key_for_orientation(\"vertical\")], view.y_padding);\n this.update_paddings();\n }\n mark_padding_updated(view) {\n const model = view.model;\n const scale_models = model.get(\"scales\");\n this.update_padding_dict(this.x_pad_dict, view, scale_models[model.get_key_for_orientation(\"horizontal\")], view.x_padding);\n this.update_padding_dict(this.y_pad_dict, view, scale_models[model.get_key_for_orientation(\"vertical\")], view.y_padding);\n this.update_paddings();\n }\n update_marks(mark_views) {\n this.update_paddings();\n }\n remove_mark(view) {\n // Called when a mark is removed from the mark list.\n const model = view.model;\n model.off(\"redraw_legend\", null, this);\n model.off(\"data_updated\", null, this);\n model.off(\"scales_updated\", null, this);\n model.off(\"mark_padding_updated\", null, this);\n const scale_models = model.get(\"scales\");\n this.remove_from_padding_dict(this.x_pad_dict, view, scale_models[model.get_key_for_orientation(\"horizontal\")]);\n this.remove_from_padding_dict(this.y_pad_dict, view, scale_models[model.get_key_for_orientation(\"vertical\")]);\n view.remove();\n }\n add_mark(model) {\n model.state_change.then(() => {\n model.on(\"data_updated redraw_legend\", this.update_legend, this);\n });\n const dummy_node = this.fig_marks.node().appendChild(document.createElementNS(d3.namespaces.svg, \"g\"));\n return this.create_child_view(model, { clip_id: this.clip_id }).then((view) => {\n view.dummy_node = dummy_node;\n view.on(\"mark_padding_updated\", () => {\n this.mark_padding_updated(view);\n }, this);\n view.on(\"mark_scales_updated\", () => {\n this.mark_scales_updated(view);\n }, this);\n let child_x_scale = view.model.get(\"scales\")[view.model.get_key_for_dimension(\"x\")];\n let child_y_scale = view.model.get(\"scales\")[view.model.get_key_for_dimension(\"y\")];\n if (child_x_scale === undefined) {\n child_x_scale = this.scale_x.model;\n }\n if (child_y_scale === undefined) {\n child_y_scale = this.scale_y.model;\n }\n this.update_padding_dict(this.x_pad_dict, view, child_x_scale, view.x_padding);\n this.update_padding_dict(this.y_pad_dict, view, child_y_scale, view.y_padding);\n // If the mark needs a WebGL renderer, we create it\n if (view.render_gl) {\n this.createWebGLRenderer();\n }\n return view;\n });\n }\n update_paddings() {\n // Iterate over the paddings of the marks for each scale and store\n // the maximum padding for each scale on the X and Y in\n // x_padding_arr and y_padding_arr\n this.x_padding_arr = {};\n this.y_padding_arr = {};\n const that = this;\n _.forEach(this.x_pad_dict, function (dict, scale_id) {\n let max = 0;\n _.forEach(dict, function (value, key) {\n max = Math.max(max, value);\n });\n that.x_padding_arr[scale_id] = max;\n });\n _.forEach(this.y_pad_dict, function (dict, scale_id) {\n let max = 0;\n _.forEach(dict, function (value, key) {\n max = Math.max(max, value);\n });\n that.y_padding_arr[scale_id] = max;\n });\n // This is for the figure to relayout everything to account for the\n // updated margins.\n this.trigger(\"margin_updated\");\n }\n update_plotarea_dimensions() {\n this.plotarea_width = this.width - this.margin.left - this.margin.right;\n this.plotarea_height = this.height - this.margin.top - this.margin.bottom;\n }\n processPhosphorMessage(msg) {\n super.processPhosphorMessage.apply(this, arguments);\n switch (msg.type) {\n case 'resize':\n case 'after-show':\n case 'after-attach':\n if (this.pWidget.isVisible) {\n const figureSize = this.getFigureSize();\n if ((this.width !== figureSize.width) || (this.height !== figureSize.height)) {\n this.debouncedRelayout();\n }\n }\n break;\n }\n }\n relayout() {\n const relayoutImpl = () => {\n this.relayoutRequested = false; // reset relayout request\n const figureSize = this.getFigureSize();\n this.width = figureSize.width;\n this.height = figureSize.height;\n // update ranges\n this.margin = this.model.get(\"fig_margin\");\n this.update_plotarea_dimensions();\n // we hide it when the plot area is too small\n if ((this.plotarea_width < 1) || (this.plotarea_width < 1)) {\n this.el.style.visibility = \"hidden\";\n return; // no need to continue setting properties, which can only produce errors in the js console\n }\n else {\n this.el.style.visibility = \"\";\n }\n if (this.scale_x !== undefined && this.scale_x !== null) {\n this.scale_x.set_range([0, this.plotarea_width]);\n }\n if (this.scale_y !== undefined && this.scale_y !== null) {\n this.scale_y.set_range([this.plotarea_height, 0]);\n }\n // transform figure\n this.fig.attr(\"transform\", \"translate(\" + this.margin.left + \",\" +\n this.margin.top + \")\");\n this.fig_background.attr(\"transform\", \"translate(\" + this.margin.left + \",\" +\n this.margin.top + \")\");\n this.title.attrs({\n x: (0.5 * (this.plotarea_width)),\n y: -(this.margin.top / 2.0),\n dy: \"1em\"\n });\n this.bg\n .attr(\"width\", this.plotarea_width)\n .attr(\"height\", this.plotarea_height);\n this.bg_events\n .attr(\"width\", this.plotarea_width)\n .attr(\"height\", this.plotarea_height);\n this.clip_path.attr(\"width\", this.plotarea_width)\n .attr(\"height\", this.plotarea_height);\n this.trigger(\"margin_updated\");\n this.update_legend();\n this.layout_webgl_canvas();\n };\n if (!this.relayoutRequested) {\n this.relayoutRequested = true; // avoid scheduling a relayout twice\n requestAnimationFrame(relayoutImpl.bind(this));\n }\n }\n layout_webgl_canvas() {\n if (this.renderer) {\n this.renderer.domElement.style = 'left: ' + this.margin.left + 'px; ' +\n 'top: ' + this.margin.top + 'px;';\n this.renderer.setSize(this.plotarea_width, this.plotarea_height);\n this.update_gl();\n }\n }\n update_legend() {\n this.fig_marks.selectAll(\".g_legend\").remove();\n const legend_height = 14;\n const legend_width = 24;\n const legend_location = this.model.get(\"legend_location\");\n const legend_g = this.fig_marks.append(\"g\")\n .attr(\"class\", \"g_legend\");\n const that = this;\n let count = 1;\n let max_label_len = 1;\n if (this.mark_views !== undefined && this.mark_views !== null) {\n Promise.all(this.mark_views.views).then(function (views) {\n views.forEach(function (mark_view) {\n if (mark_view.model.get(\"display_legend\")) {\n const child_count = mark_view.draw_legend(legend_g, 0, count * (legend_height + 2), 0, legend_height + 2);\n count = count + child_count[0];\n max_label_len = (child_count[1]) ?\n Math.max(max_label_len, child_count[1]) : max_label_len;\n }\n });\n const coords = that.get_legend_coords(legend_location, legend_width, (count + 1) * (legend_height + 2), 0);\n if (count !== 1) {\n legend_g.insert(\"g\", \":first-child\")\n .attr(\"class\", \"axis\")\n .append(\"rect\")\n .attr(\"y\", (legend_height + 2) / 2.0)\n .attr(\"x\", (-0.5 * (legend_height + 2)))\n .attr(\"width\", (max_label_len + 2) + \"em\")\n .attr(\"height\", (count * (legend_height + 2)));\n }\n max_label_len = (legend_location === \"top-right\" ||\n legend_location === \"right\" ||\n legend_location === \"bottom-right\") ? -(max_label_len + 2) : 1;\n const em = 16;\n legend_g.attr(\"transform\", \"translate(\" + String(coords[0] + max_label_len * em) + \" \" +\n String(coords[1]) + \") \");\n legend_g.selectAll(\"text.legendtext\").styles(that.model.get(\"legend_text\"));\n legend_g.selectAll(\".axis\").selectAll(\"rect\").styles(that.model.get(\"legend_style\"));\n });\n }\n }\n get_legend_coords(legend_location, width, height, disp) {\n let x_start = 0;\n let y_start = 0;\n const fig_width = this.plotarea_width;\n const fig_height = this.plotarea_height;\n switch (legend_location) {\n case \"top\":\n x_start = fig_width * 0.5 - width;\n y_start = 0;\n break;\n case \"top-right\":\n x_start = fig_width - disp;\n y_start = 0;\n break;\n case \"right\":\n x_start = fig_width - disp;\n y_start = fig_height * 0.5 - height;\n break;\n case \"bottom-right\":\n x_start = fig_width - disp;\n y_start = fig_height - height;\n break;\n case \"bottom\":\n x_start = fig_width * 0.5 - width;\n y_start = fig_height - height;\n break;\n case \"bottom-left\":\n x_start = 0;\n y_start = fig_height - height;\n break;\n case \"left\":\n x_start = 0;\n y_start = fig_height * 0.5 - height;\n break;\n default:\n x_start = 0;\n y_start = 0;\n }\n return [x_start, y_start];\n }\n set_interaction(model) {\n if (model) {\n // Sets the child interaction\n return model.state_change.then(() => {\n // Sets the child interaction\n return this.create_child_view(model).then((view) => {\n if (this.interaction_view) {\n this.interaction_view.remove();\n }\n this.interaction_view = view;\n this.interaction.node().appendChild(view.el);\n this.displayed.then(() => {\n view.trigger(\"displayed\");\n });\n return view;\n });\n });\n }\n else {\n if (this.interaction_view) {\n this.interaction_view.remove();\n }\n return Promise.resolve(null);\n }\n }\n update_title(model, title) {\n this.title.text(this.model.get(\"title\"));\n }\n remove() {\n if (this.mark_views !== undefined && this.mark_views !== null) {\n this.mark_views.remove();\n }\n if (this.axis_views !== undefined && this.axis_views !== null) {\n this.axis_views.remove();\n }\n if (this.tooltip_div !== undefined) {\n this.tooltip_div.remove();\n }\n return super.remove.apply(this, arguments);\n }\n get_svg() {\n // Returns the outer html of the figure svg\n const replaceAll = function (find, replace, str) {\n return str.replace(new RegExp(find, \"g\"), replace);\n };\n const get_css = function (node, regs) {\n /**\n * Gathers all the css rules applied to elements of the svg\n * node. Removes the parent element selectors specified in\n * argument `regs`.\n */\n let css = \"\";\n const sheets = document.styleSheets;\n let selector;\n for (let i = 0; i < sheets.length; i++) {\n let rules = null;\n // due to CORS we may have some sheets we cannot access, instead of checking we always try\n try {\n rules = sheets[i].cssRules;\n }\n catch (e) {\n // ignore CORS errors\n }\n if (rules) {\n for (let j = 0; j < rules.length; j++) {\n const rule = rules[j];\n if (typeof (rule.style) !== \"undefined\") {\n let match = null;\n try {\n match = node.querySelectorAll(rule.selectorText);\n }\n catch (err) {\n console.warn(\"Invalid CSS selector '\" +\n rule.selectorText + \"'\", err);\n }\n if (match) {\n const elems = node.querySelectorAll(rule.selectorText);\n if (elems.length > 0) {\n selector = rule.selectorText;\n for (let r = 0; r < regs.length; r++) {\n selector = replaceAll(regs[r], \"\", selector);\n }\n css += `${selector} { ${rule.style.cssText} }\n `;\n }\n }\n else if (rule.cssText.match(/^@font-face/)) {\n css += rule.cssText + \"\\n\";\n }\n }\n }\n }\n }\n // TODO: this is terrible. The previous loop over style sheets\n // does not catch document's top-level properties.\n css += \"svg { font-size: 10px; }\\n\";\n return css;\n };\n // Even though the canvas may display the rendering already, it is not guaranteed it can be read of the canvas\n // or we have to set preserveDrawingBuffer to true, which may impact performance.\n // Instead, we render again, and directly afterwards we do get the pixel data using canvas.toDataURL\n return this.render_gl().then(() => {\n // Create standalone SVG string\n const node_background = this.svg_background.node();\n const node_foreground = this.svg.node();\n const width = this.plotarea_width;\n const height = this.plotarea_height;\n // Creates a standalone SVG string from an inline SVG element\n // containing all the computed style attributes.\n const svg = node_foreground.cloneNode(true);\n svg.setAttribute(\"version\", \"1.1\");\n svg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svg.setAttribute(\"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n svg.style.background = window.getComputedStyle(document.body).background;\n const computedStyle = window.getComputedStyle(this.el);\n var cssCode = get_css(this.el, [\"\\.theme-dark\", \"\\.theme-light\", \".bqplot > \", \":root\"]) + \"\\n\";\n // extract all CSS variables, and generate a piece of css to define the variables\n var cssVariables = cssCode.match(/(--\\w[\\w-]*)/g) || [];\n var cssVariableCode = cssVariables.reduce((cssCode, variable) => {\n const value = computedStyle.getPropertyValue(variable);\n return `${cssCode}\\n\\t${variable}: ${value};`;\n }, \":root {\") + \"\\n}\\n\";\n // and put the CSS in a style element\n const styleElement = document.createElement(\"style\");\n styleElement.setAttribute(\"type\", \"text/css\");\n styleElement.innerHTML = \"<![CDATA[\\n\" + cssVariableCode + cssCode + \"]]>\";\n const defs = document.createElement(\"defs\");\n defs.appendChild(styleElement);\n // we put the svg background part before the marks\n const g_root = svg.children[0];\n const svg_background = node_background.cloneNode(true);\n // first the axes\n g_root.insertBefore(svg_background.children[0].children[1], g_root.children[0]);\n // and the background as first element\n g_root.insertBefore(svg_background.children[0].children[0], g_root.children[0]);\n // and add the webgl canvas as an image\n if (this.renderer) {\n const data_url = this.renderer.domElement.toDataURL('image/png');\n const marks = d3.select(g_root.children[2]);\n marks.append(\"image\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", 1)\n .attr(\"height\", 1)\n .attr(\"preserveAspectRatio\", \"none\")\n .attr(\"transform\", \"scale(\" + width + \", \" + height + \")\")\n .attr(\"href\", data_url);\n }\n svg.insertBefore(defs, svg.firstChild);\n // Getting the outer HTML\n return svg.outerHTML;\n });\n }\n get_rendered_canvas(scale) {\n // scale up the underlying canvas for high dpi screens\n // such that image is of the same quality\n scale = scale || window.devicePixelRatio;\n // Render a SVG data into a canvas and\n return this.get_svg().then((xml) => {\n return new Promise((accept) => {\n const image = new Image();\n image.onload = () => {\n const canvas = document.createElement(\"canvas\");\n canvas.classList.add('bqplot');\n canvas.width = this.width * scale;\n canvas.height = this.height * scale;\n canvas.style.width = this.width;\n canvas.style.height = this.height;\n const context = canvas.getContext(\"2d\");\n context.scale(scale, scale);\n context.drawImage(image, 0, 0);\n accept(canvas);\n };\n image.src = \"data:image/svg+xml;base64,\" + btoa(xml);\n });\n });\n }\n save_png(filename, scale) {\n // Render a SVG data into a canvas and download as PNG.\n this.get_rendered_canvas(scale).then((canvas) => {\n const a = document.createElement(\"a\");\n a.download = filename || \"image.png\";\n a.href = canvas.toDataURL(\"image/png\");\n document.body.appendChild(a);\n a.click();\n });\n }\n save_svg(filename) {\n this.get_svg().then((xml) => {\n const a = document.createElement(\"a\");\n a.download = filename || \"bqplot.svg\";\n a.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(xml);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n });\n }\n update_gl() {\n if (!this._update_requested) {\n this._update_requested = true;\n requestAnimationFrame(this._update_gl.bind(this));\n }\n }\n _update_gl() {\n this.render_gl();\n this._update_requested = false;\n }\n render_gl() {\n // Nothing to render using a WebGL context\n if (!this.renderer) {\n return Promise.resolve();\n }\n return Promise.all(this.mark_views.views).then((views) => {\n // render all marks that have a render_gl method\n this.renderer.autoClear = false;\n this.renderer.autoClearColor = new THREE.Color(0x000000);\n this.renderer.clear();\n let marks_gl = _.filter(views, (view) => view.render_gl);\n _.each(marks_gl, (mark) => {\n mark.render_gl();\n });\n });\n }\n change_theme() {\n this.el.classList.remove(this.model.previous(\"theme\"));\n this.el.classList.add(this.model.get(\"theme\"));\n }\n}\nexports.Figure = Figure;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlndXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0ZpZ3VyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7Ozs7O0FBRUgsK0RBQWlEO0FBQ2pELHVDQUF5QjtBQUN6Qiw4QkFBNEI7QUFDNUIscUZBQXFGO0FBQ3JGLDhDQUFnQztBQUNoQyxtRUFBcUQ7QUFDckQsMERBQStCO0FBQy9CLDZDQUErQjtBQUcvQixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQU1sRixDQUFDO0FBR0YsTUFDTSxNQUFPLFNBQVEsT0FBTyxDQUFDLGFBQWE7SUFEMUM7O1FBbzlCWSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7SUFLL0MsQ0FBQztJQXQ5QkcsVUFBVTtRQUNOLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBZSxDQUFDO1FBQzdFLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBa0IsR0FBRyxDQUFDLENBQUM7UUFFM0MsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMs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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A delegate reference for the popper js library\n */\nexports.ElementReference = (function () {\n function ElementReference(elt) {\n this.elt = elt;\n }\n ElementReference.prototype.getBoundingClientRect = function () {\n return this.elt.getBoundingClientRect();\n };\n Object.defineProperty(ElementReference.prototype, \"clientWidth\", {\n get: function () {\n return this.elt.clientWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementReference.prototype, \"clientHeight\", {\n get: function () {\n return this.elt.clientHeight;\n },\n enumerable: true,\n configurable: true\n });\n return ElementReference;\n}());\n/**\n * A reference for a specific position.\n */\nexports.PositionReference = (function () {\n function PositionReference(_a) {\n const x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n PositionReference.prototype.getBoundingClientRect = function () {\n const halfwidth = this.width / 2;\n const halfheight = this.height / 2;\n return {\n left: this.x - halfwidth,\n right: this.x + halfwidth,\n top: this.y - halfheight,\n bottom: this.y + halfheight,\n width: this.width,\n height: this.height\n };\n };\n Object.defineProperty(PositionReference.prototype, \"clientWidth\", {\n get: function () { return this.width; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PositionReference.prototype, \"clientHeight\", {\n get: function () { return this.height; },\n enumerable: true,\n configurable: true\n });\n return PositionReference;\n}());\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9wcGVyUmVmZXJlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BvcHBlclJlZmVyZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7QUFFSDs7R0FFRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUcsQ0FBQztJQUM3QixTQUFTLGdCQUFnQixDQUFDLEdBQUc7UUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUNELGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsR0FBRztRQUMvQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUM1QyxDQUFDLENBQUM7SUFDRixNQUFNLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUU7UUFDN0QsR0FBRyxFQUFFO1lBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFO1FBQzlELEdBQUcsRUFBRTtZQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDakMsQ0FBQztRQUNELFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFlBQVksRUFBRSxJQUFJO0tBQ3JCLENBQUMsQ0FBQztJQUNILE9BQU8sZ0JBQWdCLENBQUM7QUFDNUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUVMOztHQUVHO0FBQ1UsUUFBQSxpQkFBaUIsR0FBRyxDQUFDO0lBQzlCLFNBQVMsaUJBQWlCLENBQUMsRUFBRTtRQUN6QixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQy9ELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsU0FBUyxDQUFDLHFCQUFxQixHQUFHO1FBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTO1lBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVM7WUFDekIsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVTtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDdEIsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRTtRQUM5RCxHQUFHLEVBQUUsY0FBYyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFlBQVksRUFBRSxJQUFJO0tBQ3JCLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRTtRQUMvRCxHQUFHLEVBQUUsY0FBYyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFlBQVksRUFBRSxJQUFJO0tBQ3JCLENBQUMsQ0FBQztJQUNILE9BQU8saUJBQWlCLENBQUM7QUFDN0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyJ9","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.15.0\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","// Polyfills\n\nif ( Number.EPSILON === undefined ) {\n\n\tNumber.EPSILON = Math.pow( 2, - 52 );\n\n}\n\nif ( Number.isInteger === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n\n\tNumber.isInteger = function ( value ) {\n\n\t\treturn typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value;\n\n\t};\n\n}\n\n//\n\nif ( Math.sign === undefined ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\n\n\tMath.sign = function ( x ) {\n\n\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\n\n\t};\n\n}\n\nif ( 'name' in Function.prototype === false ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n\n\tObject.defineProperty( Function.prototype, 'name', {\n\n\t\tget: function () {\n\n\t\t\treturn this.toString().match( /^\\s*function\\s*([^\\(\\s]*)/ )[ 1 ];\n\n\t\t}\n\n\t} );\n\n}\n\nif ( Object.assign === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\n\t( function () {\n\n\t\tObject.assign = function ( target ) {\n\n\t\t\tif ( target === undefined || target === null ) {\n\n\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\n\n\t\t\t}\n\n\t\t\tvar output = Object( target );\n\n\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\n\n\t\t\t\tvar source = arguments[ index ];\n\n\t\t\t\tif ( source !== undefined && source !== null ) {\n\n\t\t\t\t\tfor ( var nextKey in source ) {\n\n\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n\n\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn output;\n\n\t\t};\n\n\t} )();\n\n}\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nfunction EventDispatcher() {}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tvar listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tvar listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tvar index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\tvar array = listenerArray.slice( 0 );\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nvar REVISION = '91';\nvar MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\nvar CullFaceNone = 0;\nvar CullFaceBack = 1;\nvar CullFaceFront = 2;\nvar CullFaceFrontBack = 3;\nvar FrontFaceDirectionCW = 0;\nvar FrontFaceDirectionCCW = 1;\nvar BasicShadowMap = 0;\nvar PCFShadowMap = 1;\nvar PCFSoftShadowMap = 2;\nvar FrontSide = 0;\nvar BackSide = 1;\nvar DoubleSide = 2;\nvar FlatShading = 1;\nvar SmoothShading = 2;\nvar NoColors = 0;\nvar FaceColors = 1;\nvar VertexColors = 2;\nvar NoBlending = 0;\nvar NormalBlending = 1;\nvar AdditiveBlending = 2;\nvar SubtractiveBlending = 3;\nvar MultiplyBlending = 4;\nvar CustomBlending = 5;\nvar AddEquation = 100;\nvar SubtractEquation = 101;\nvar ReverseSubtractEquation = 102;\nvar MinEquation = 103;\nvar MaxEquation = 104;\nvar ZeroFactor = 200;\nvar OneFactor = 201;\nvar SrcColorFactor = 202;\nvar OneMinusSrcColorFactor = 203;\nvar SrcAlphaFactor = 204;\nvar OneMinusSrcAlphaFactor = 205;\nvar DstAlphaFactor = 206;\nvar OneMinusDstAlphaFactor = 207;\nvar DstColorFactor = 208;\nvar OneMinusDstColorFactor = 209;\nvar SrcAlphaSaturateFactor = 210;\nvar NeverDepth = 0;\nvar AlwaysDepth = 1;\nvar LessDepth = 2;\nvar LessEqualDepth = 3;\nvar EqualDepth = 4;\nvar GreaterEqualDepth = 5;\nvar GreaterDepth = 6;\nvar NotEqualDepth = 7;\nvar MultiplyOperation = 0;\nvar MixOperation = 1;\nvar AddOperation = 2;\nvar NoToneMapping = 0;\nvar LinearToneMapping = 1;\nvar ReinhardToneMapping = 2;\nvar Uncharted2ToneMapping = 3;\nvar CineonToneMapping = 4;\nvar UVMapping = 300;\nvar CubeReflectionMapping = 301;\nvar CubeRefractionMapping = 302;\nvar EquirectangularReflectionMapping = 303;\nvar EquirectangularRefractionMapping = 304;\nvar SphericalReflectionMapping = 305;\nvar CubeUVReflectionMapping = 306;\nvar CubeUVRefractionMapping = 307;\nvar RepeatWrapping = 1000;\nvar ClampToEdgeWrapping = 1001;\nvar MirroredRepeatWrapping = 1002;\nvar NearestFilter = 1003;\nvar NearestMipMapNearestFilter = 1004;\nvar NearestMipMapLinearFilter = 1005;\nvar LinearFilter = 1006;\nvar LinearMipMapNearestFilter = 1007;\nvar LinearMipMapLinearFilter = 1008;\nvar UnsignedByteType = 1009;\nvar ByteType = 1010;\nvar ShortType = 1011;\nvar UnsignedShortType = 1012;\nvar IntType = 1013;\nvar UnsignedIntType = 1014;\nvar FloatType = 1015;\nvar HalfFloatType = 1016;\nvar UnsignedShort4444Type = 1017;\nvar UnsignedShort5551Type = 1018;\nvar UnsignedShort565Type = 1019;\nvar UnsignedInt248Type = 1020;\nvar AlphaFormat = 1021;\nvar RGBFormat = 1022;\nvar RGBAFormat = 1023;\nvar LuminanceFormat = 1024;\nvar LuminanceAlphaFormat = 1025;\nvar RGBEFormat = RGBAFormat;\nvar DepthFormat = 1026;\nvar DepthStencilFormat = 1027;\nvar RGB_S3TC_DXT1_Format = 33776;\nvar RGBA_S3TC_DXT1_Format = 33777;\nvar RGBA_S3TC_DXT3_Format = 33778;\nvar RGBA_S3TC_DXT5_Format = 33779;\nvar RGB_PVRTC_4BPPV1_Format = 35840;\nvar RGB_PVRTC_2BPPV1_Format = 35841;\nvar RGBA_PVRTC_4BPPV1_Format = 35842;\nvar RGBA_PVRTC_2BPPV1_Format = 35843;\nvar RGB_ETC1_Format = 36196;\nvar RGBA_ASTC_4x4_Format = 37808;\nvar RGBA_ASTC_5x4_Format = 37809;\nvar RGBA_ASTC_5x5_Format = 37810;\nvar RGBA_ASTC_6x5_Format = 37811;\nvar RGBA_ASTC_6x6_Format = 37812;\nvar RGBA_ASTC_8x5_Format = 37813;\nvar RGBA_ASTC_8x6_Format = 37814;\nvar RGBA_ASTC_8x8_Format = 37815;\nvar RGBA_ASTC_10x5_Format = 37816;\nvar RGBA_ASTC_10x6_Format = 37817;\nvar RGBA_ASTC_10x8_Format = 37818;\nvar RGBA_ASTC_10x10_Format = 37819;\nvar RGBA_ASTC_12x10_Format = 37820;\nvar RGBA_ASTC_12x12_Format = 37821;\nvar LoopOnce = 2200;\nvar LoopRepeat = 2201;\nvar LoopPingPong = 2202;\nvar InterpolateDiscrete = 2300;\nvar InterpolateLinear = 2301;\nvar InterpolateSmooth = 2302;\nvar ZeroCurvatureEnding = 2400;\nvar ZeroSlopeEnding = 2401;\nvar WrapAroundEnding = 2402;\nvar TrianglesDrawMode = 0;\nvar TriangleStripDrawMode = 1;\nvar TriangleFanDrawMode = 2;\nvar LinearEncoding = 3000;\nvar sRGBEncoding = 3001;\nvar GammaEncoding = 3007;\nvar RGBEEncoding = 3002;\nvar LogLuvEncoding = 3003;\nvar RGBM7Encoding = 3004;\nvar RGBM16Encoding = 3005;\nvar RGBDEncoding = 3006;\nvar BasicDepthPacking = 3200;\nvar RGBADepthPacking = 3201;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar _Math = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: ( function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tvar lut = [];\n\n\t\tfor ( var i = 0; i < 256; i ++ ) {\n\n\t\t\tlut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 ).toUpperCase();\n\n\t\t}\n\n\t\treturn function generateUUID() {\n\n\t\t\tvar d0 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d1 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d2 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d3 = Math.random() * 0xffffffff | 0;\n\t\t\treturn lut[ d0 & 0xff ] + lut[ d0 >> 8 & 0xff ] + lut[ d0 >> 16 & 0xff ] + lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d1 & 0xff ] + lut[ d1 >> 8 & 0xff ] + '-' + lut[ d1 >> 16 & 0x0f | 0x40 ] + lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d2 & 0x3f | 0x80 ] + lut[ d2 >> 8 & 0xff ] + '-' + lut[ d2 >> 16 & 0xff ] + lut[ d2 >> 24 & 0xff ] +\n\t\t\t\tlut[ d3 & 0xff ] + lut[ d3 >> 8 & 0xff ] + lut[ d3 >> 16 & 0xff ] + lut[ d3 >> 24 & 0xff ];\n\n\t\t};\n\n\t} )(),\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range <a1, a2> to range <b1, b2>\n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from <low, high> interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from <low, high> interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * _Math.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * _Math.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author philogb / http://blog.thejit.org/\n * @author egraether / http://egraether.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nfunction Vector2( x, y ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\n}\n\nObject.defineProperties( Vector2.prototype, {\n\n\t\"width\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.x = value;\n\n\t\t}\n\n\t},\n\n\t\"height\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.y = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tisVector2: true,\n\n\tset: function ( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector2();\n\t\tvar max = new Vector2();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tangle: function () {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tvar angle = Math.atan2( this.y, this.x );\n\n\t\tif ( angle < 0 ) angle += 2 * Math.PI;\n\n\t\treturn angle;\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t},\n\n\trotateAround: function ( center, angle ) {\n\n\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tvar x = this.x - center.x;\n\t\tvar y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author jordi_ros / http://plattsoft.com\n * @author D1plo1d / http://github.com/D1plo1d\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author timknip / http://www.floorplanner.com/\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Matrix4() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0, 0,\n\t\t0, 1, 0, 0,\n\t\t0, 0, 1, 0,\n\t\t0, 0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix4.prototype, {\n\n\tisMatrix4: true,\n\n\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t},\n\n\tcopyPosition: function ( m ) {\n\n\t\tvar te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\textractRotation: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function extractRotation( m ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\n\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\n\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakeRotationFromEuler: function ( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\n\t\tvar x = euler.x, y = euler.y, z = euler.z;\n\t\tvar a = Math.cos( x ), b = Math.sin( x );\n\t\tvar c = Math.cos( y ), d = Math.sin( y );\n\t\tvar e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// last column\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// bottom row\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationFromQuaternion: function ( q ) {\n\n\t\tvar te = this.elements;\n\n\t\tvar x = q._x, y = q._y, z = q._z, w = q._w;\n\t\tvar x2 = x + x, y2 = y + y, z2 = z + z;\n\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tte[ 0 ] = 1 - ( yy + zz );\n\t\tte[ 4 ] = xy - wz;\n\t\tte[ 8 ] = xz + wy;\n\n\t\tte[ 1 ] = xy + wz;\n\t\tte[ 5 ] = 1 - ( xx + zz );\n\t\tte[ 9 ] = yz - wx;\n\n\t\tte[ 2 ] = xz - wy;\n\t\tte[ 6 ] = yz + wx;\n\t\tte[ 10 ] = 1 - ( xx + yy );\n\n\t\t// last column\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// bottom row\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function () {\n\n\t\tvar x = new Vector3();\n\t\tvar y = new Vector3();\n\t\tvar z = new Vector3();\n\n\t\treturn function lookAt( eye, target, up ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tz.subVectors( eye, target );\n\n\t\t\tif ( z.lengthSq() === 0 ) {\n\n\t\t\t\t// eye and target are in the same position\n\n\t\t\t\tz.z = 1;\n\n\t\t\t}\n\n\t\t\tz.normalize();\n\t\t\tx.crossVectors( up, z );\n\n\t\t\tif ( x.lengthSq() === 0 ) {\n\n\t\t\t\t// up and z are parallel\n\n\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\tz.x += 0.0001;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz.z += 0.0001;\n\n\t\t\t\t}\n\n\t\t\t\tz.normalize();\n\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t}\n\n\t\t\tx.normalize();\n\t\t\ty.crossVectors( z, x );\n\n\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\n\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\n\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix4( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar te = this.elements;\n\t\tvar tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tsetPosition: function ( v ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 12 ] = v.x;\n\t\tte[ 13 ] = v.y;\n\t\tte[ 14 ] = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tvar te = this.elements,\n\t\t\tme = m.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\n\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\n\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\n\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( v ) {\n\n\t\tvar te = this.elements;\n\t\tvar x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxScaleOnAxis: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t},\n\n\tmakeTranslation: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationX: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationY: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationZ: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationAxis: function ( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tvar c = Math.cos( angle );\n\t\tvar s = Math.sin( angle );\n\t\tvar t = 1 - c;\n\t\tvar x = axis.x, y = axis.y, z = axis.z;\n\t\tvar tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\t return this;\n\n\t},\n\n\tmakeScale: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeShear: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tcompose: function ( position, quaternion, scale ) {\n\n\t\tthis.makeRotationFromQuaternion( quaternion );\n\t\tthis.scale( scale );\n\t\tthis.setPosition( position );\n\n\t\treturn this;\n\n\t},\n\n\tdecompose: function () {\n\n\t\tvar vector = new Vector3();\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function decompose( position, quaternion, scale ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t// if determine is negative, we need to invert one scale\n\t\t\tvar det = this.determinant();\n\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\tposition.x = te[ 12 ];\n\t\t\tposition.y = te[ 13 ];\n\t\t\tposition.z = te[ 14 ];\n\n\t\t\t// scale the rotation part\n\t\t\tmatrix.copy( this );\n\n\t\t\tvar invSX = 1 / sx;\n\t\t\tvar invSY = 1 / sy;\n\t\t\tvar invSZ = 1 / sz;\n\n\t\t\tmatrix.elements[ 0 ] *= invSX;\n\t\t\tmatrix.elements[ 1 ] *= invSX;\n\t\t\tmatrix.elements[ 2 ] *= invSX;\n\n\t\t\tmatrix.elements[ 4 ] *= invSY;\n\t\t\tmatrix.elements[ 5 ] *= invSY;\n\t\t\tmatrix.elements[ 6 ] *= invSY;\n\n\t\t\tmatrix.elements[ 8 ] *= invSZ;\n\t\t\tmatrix.elements[ 9 ] *= invSZ;\n\t\t\tmatrix.elements[ 10 ] *= invSZ;\n\n\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\tscale.x = sx;\n\t\t\tscale.y = sy;\n\t\t\tscale.z = sz;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakePerspective: function ( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\t\tvar x = 2 * near / ( right - left );\n\t\tvar y = 2 * near / ( top - bottom );\n\n\t\tvar a = ( right + left ) / ( right - left );\n\t\tvar b = ( top + bottom ) / ( top - bottom );\n\t\tvar c = - ( far + near ) / ( far - near );\n\t\tvar d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t},\n\n\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\n\n\t\tvar te = this.elements;\n\t\tvar w = 1.0 / ( right - left );\n\t\tvar h = 1.0 / ( top - bottom );\n\t\tvar p = 1.0 / ( far - near );\n\n\t\tvar x = ( right + left ) * w;\n\t\tvar y = ( top + bottom ) * h;\n\t\tvar z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Quaternion( x, y, z, w ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Quaternion, {\n\n\tslerp: function ( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t},\n\n\tslerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tvar x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ],\n\n\t\t\tx1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tvar s = 1 - t,\n\n\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tvar sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tvar tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n} );\n\nObject.defineProperties( Quaternion.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tw: {\n\n\t\tget: function () {\n\n\t\t\treturn this._w;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._w = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Quaternion.prototype, {\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t},\n\n\tcopy: function ( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromEuler: function ( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar x = euler._x, y = euler._y, z = euler._z, order = euler.order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tvar cos = Math.cos;\n\t\tvar sin = Math.sin;\n\n\t\tvar c1 = cos( x / 2 );\n\t\tvar c2 = cos( y / 2 );\n\t\tvar c3 = cos( z / 2 );\n\n\t\tvar s1 = sin( x / 2 );\n\t\tvar s2 = sin( y / 2 );\n\t\tvar s3 = sin( z / 2 );\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t}\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromAxisAngle: function ( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33,\n\t\t\ts;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromUnitVectors: function () {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tvar v1 = new Vector3();\n\t\tvar r;\n\n\t\tvar EPS = 0.000001;\n\n\t\treturn function setFromUnitVectors( vFrom, vTo ) {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\n\t\t\tr = vFrom.dot( vTo ) + 1;\n\n\t\t\tif ( r < EPS ) {\n\n\t\t\t\tr = 0;\n\n\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tv1.crossVectors( vFrom, vTo );\n\n\t\t\t}\n\n\t\t\tthis._x = v1.x;\n\t\t\tthis._y = v1.y;\n\t\t\tthis._z = v1.z;\n\t\t\tthis._w = r;\n\n\t\t\treturn this.normalize();\n\n\t\t};\n\n\t}(),\n\n\tinverse: function () {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t},\n\n\tconjugate: function () {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\tvar l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t},\n\n\tpremultiply: function ( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t},\n\n\tmultiplyQuaternions: function ( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tslerp: function ( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta );\n\n\t\tif ( Math.abs( sinHalfTheta ) < 0.001 ) {\n\n\t\t\tthis._w = 0.5 * ( w + this._w );\n\t\t\tthis._x = 0.5 * ( x + this._x );\n\t\t\tthis._y = 0.5 * ( y + this._y );\n\t\t\tthis._z = 0.5 * ( z + this._z );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector3( x, y, z ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\n}\n\nObject.assign( Vector3.prototype, {\n\n\tisVector3: true,\n\n\tset: function ( x, y, z ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyVectors: function ( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyEuler: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyEuler( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyAxisAngle: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyAxisAngle( axis, angle ) {\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tvar w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tvar ix = qw * x + qy * z - qz * y;\n\t\tvar iy = qw * y + qz * x - qx * z;\n\t\tvar iz = qw * z + qx * y - qy * x;\n\t\tvar iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t},\n\n\tproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function project( camera ) {\n\n\t\t\tmatrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t};\n\n\t}(),\n\n\tunproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function unproject( camera ) {\n\n\t\t\tmatrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t};\n\n\t}(),\n\n\ttransformDirection: function ( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector3();\n\t\tvar max = new Vector3();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t},\n\n\t// TODO lengthSquared?\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tcross: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t},\n\n\tcrossVectors: function ( a, b ) {\n\n\t\tvar ax = a.x, ay = a.y, az = a.z;\n\t\tvar bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t},\n\n\tprojectOnVector: function ( vector ) {\n\n\t\tvar scalar = vector.dot( this ) / vector.lengthSq();\n\n\t\treturn this.copy( vector ).multiplyScalar( scalar );\n\n\t},\n\n\tprojectOnPlane: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function projectOnPlane( planeNormal ) {\n\n\t\t\tv1.copy( this ).projectOnVector( planeNormal );\n\n\t\t\treturn this.sub( v1 );\n\n\t\t};\n\n\t}(),\n\n\treflect: function () {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function reflect( normal ) {\n\n\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t};\n\n\t}(),\n\n\tangleTo: function ( v ) {\n\n\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( _Math.clamp( theta, - 1, 1 ) );\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t},\n\n\tsetFromSpherical: function ( s ) {\n\n\t\tvar sinPhiRadius = Math.sin( s.phi ) * s.radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( s.theta );\n\t\tthis.y = Math.cos( s.phi ) * s.radius;\n\t\tthis.z = sinPhiRadius * Math.cos( s.theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCylindrical: function ( c ) {\n\n\t\tthis.x = c.radius * Math.sin( c.theta );\n\t\tthis.y = c.y;\n\t\tthis.z = c.radius * Math.cos( c.theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixPosition: function ( m ) {\n\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixScale: function ( m ) {\n\n\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixColumn: function ( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n * @author tschw\n */\n\nfunction Matrix3() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0,\n\t\t0, 1, 0,\n\t\t0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix3.prototype, {\n\n\tisMatrix3: true,\n\n\tset: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix4: function ( m ) {\n\n\t\tvar me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix3( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t},\n\n\tgetInverse: function ( matrix, throwOnDegenerate ) {\n\n\t\tif ( matrix && matrix.isMatrix4 ) {\n\n\t\t\tconsole.error( \"THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.\" );\n\n\t\t}\n\n\t\tvar me = matrix.elements,\n\t\t\tte = this.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ],\n\t\t\tn12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ],\n\t\t\tn13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar tmp, m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tgetNormalMatrix: function ( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();\n\n\t},\n\n\ttransposeIntoArray: function ( r ) {\n\n\t\tvar m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetUvTransform: function ( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tvar c = Math.cos( rotation );\n\t\tvar s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t},\n\n\tscale: function ( sx, sy ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t},\n\n\trotate: function ( theta ) {\n\n\t\tvar c = Math.cos( theta );\n\t\tvar s = Math.sin( theta );\n\n\t\tvar te = this.elements;\n\n\t\tvar a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tvar a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( tx, ty ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n */\n\nvar textureId = 0;\n\nfunction Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\n\tthis.image = image !== undefined ? image : Texture.DEFAULT_IMAGE;\n\tthis.mipmaps = [];\n\n\tthis.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING;\n\n\tthis.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping;\n\tthis.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping;\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter;\n\n\tthis.anisotropy = anisotropy !== undefined ? anisotropy : 1;\n\n\tthis.format = format !== undefined ? format : RGBAFormat;\n\tthis.type = type !== undefined ? type : UnsignedByteType;\n\n\tthis.offset = new Vector2( 0, 0 );\n\tthis.repeat = new Vector2( 1, 1 );\n\tthis.center = new Vector2( 0, 0 );\n\tthis.rotation = 0;\n\n\tthis.matrixAutoUpdate = true;\n\tthis.matrix = new Matrix3();\n\n\tthis.generateMipmaps = true;\n\tthis.premultiplyAlpha = false;\n\tthis.flipY = true;\n\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t//\n\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\tthis.encoding = encoding !== undefined ? encoding : LinearEncoding;\n\n\tthis.version = 0;\n\tthis.onUpdate = null;\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Texture,\n\n\tisTexture: true,\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tfunction getDataURL( image ) {\n\n\t\t\tvar canvas;\n\n\t\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\t\tcanvas = image;\n\n\t\t\t} else {\n\n\t\t\t\tcanvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\tcanvas.width = image.width;\n\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\tvar context = canvas.getContext( '2d' );\n\n\t\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t\t} else {\n\n\t\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tvar image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = _Math.generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: getDataURL( image )\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t},\n\n\ttransformUv: function ( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.defineProperty( Texture.prototype, \"needsUpdate\", {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector4( x, y, z, w ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\tthis.w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Vector4.prototype, {\n\n\tisVector4: true,\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tsetAxisAngleFromQuaternion: function ( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tvar s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetAxisAngleFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar angle, x, y, z,\t\t// variables for result\n\t\t\tepsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tvar xx = ( m11 + 1 ) / 2;\n\t\t\tvar yy = ( m22 + 1 ) / 2;\n\t\t\tvar zz = ( m33 + 1 ) / 2;\n\t\t\tvar xy = ( m12 + m21 ) / 4;\n\t\t\tvar xz = ( m13 + m31 ) / 4;\n\t\t\tvar yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tvar s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t ( m13 - m31 ) * ( m13 - m31 ) +\n\t\t ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min, max;\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tif ( min === undefined ) {\n\n\t\t\t\tmin = new Vector4();\n\t\t\t\tmax = new Vector4();\n\n\t\t\t}\n\n\t\t\tmin.set( minVal, minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author szimek / https://github.com/szimek/\n * @author alteredq / http://alteredqualia.com/\n * @author Marius Kintel / https://github.com/kintel\n */\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nfunction WebGLRenderTarget( width, height, options ) {\n\n\tthis.width = width;\n\tthis.height = height;\n\n\tthis.scissor = new Vector4( 0, 0, width, height );\n\tthis.scissorTest = false;\n\n\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\toptions = options || {};\n\n\tif ( options.minFilter === undefined ) options.minFilter = LinearFilter;\n\n\tthis.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;\n\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n}\n\nWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: WebGLRenderTarget,\n\n\tisWebGLRenderTarget: true,\n\n\tsetSize: function ( width, height ) {\n\n\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com\n */\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tWebGLRenderTarget.call( this, width, height, options );\n\n\tthis.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5\n\tthis.activeMipMapLevel = 0;\n\n}\n\nWebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );\nWebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube;\n\nWebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { data: data, width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\tthis.unpackAlignment = 1;\n\n}\n\nDataTexture.prototype = Object.create( Texture.prototype );\nDataTexture.prototype.constructor = DataTexture;\n\nDataTexture.prototype.isDataTexture = true;\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n}\n\nObject.assign( Box3.prototype, {\n\n\tisBox3: true,\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromArray: function ( array ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tvar x = array[ i ];\n\t\t\tvar y = array[ i + 1 ];\n\t\t\tvar z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromBufferAttribute: function ( attribute ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tvar x = attribute.getX( i );\n\t\t\tvar y = attribute.getY( i );\n\t\t\tvar z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\texpandByObject: function () {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tvar scope, i, l;\n\n\t\tvar v1 = new Vector3();\n\n\t\tfunction traverse( node ) {\n\n\t\t\tvar geometry = node.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\tfor ( i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tv1.copy( vertices[ i ] );\n\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar attribute = geometry.attributes.position;\n\n\t\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\t\tfor ( i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tv1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function expandByObject( object ) {\n\n\t\t\tscope = this;\n\n\t\t\tobject.updateMatrixWorld( true );\n\n\t\t\tobject.traverse( traverse );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t},\n\n\tintersectsSphere: ( function () {\n\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function intersectsSphere( sphere ) {\n\n\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t};\n\n\t} )(),\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tvar min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= plane.constant && max >= plane.constant );\n\n\t},\n\n\tintersectsTriangle: ( function () {\n\n\t\t// triangle centered vertices\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\t// triangle edge vectors\n\t\tvar f0 = new Vector3();\n\t\tvar f1 = new Vector3();\n\t\tvar f2 = new Vector3();\n\n\t\tvar testAxis = new Vector3();\n\n\t\tvar center = new Vector3();\n\t\tvar extents = new Vector3();\n\n\t\tvar triangleNormal = new Vector3();\n\n\t\tfunction satForAxes( axes ) {\n\n\t\t\tvar i, j;\n\n\t\t\tfor ( i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t\t\ttestAxis.fromArray( axes, i );\n\t\t\t\t// project the aabb onto the seperating axis\n\t\t\t\tvar r = extents.x * Math.abs( testAxis.x ) + extents.y * Math.abs( testAxis.y ) + extents.z * Math.abs( testAxis.z );\n\t\t\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\t\t\tvar p0 = v0.dot( testAxis );\n\t\t\t\tvar p1 = v1.dot( testAxis );\n\t\t\t\tvar p2 = v2.dot( testAxis );\n\t\t\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\t\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn function intersectsTriangle( triangle ) {\n\n\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// compute box center and extents\n\t\t\tthis.getCenter( center );\n\t\t\textents.subVectors( this.max, center );\n\n\t\t\t// translate triangle to aabb origin\n\t\t\tv0.subVectors( triangle.a, center );\n\t\t\tv1.subVectors( triangle.b, center );\n\t\t\tv2.subVectors( triangle.c, center );\n\n\t\t\t// compute edge vectors for triangle\n\t\t\tf0.subVectors( v1, v0 );\n\t\t\tf1.subVectors( v2, v1 );\n\t\t\tf2.subVectors( v0, v2 );\n\n\t\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\t\tvar axes = [\n\t\t\t\t0, - f0.z, f0.y, 0, - f1.z, f1.y, 0, - f2.z, f2.y,\n\t\t\t\tf0.z, 0, - f0.x, f1.z, 0, - f1.x, f2.z, 0, - f2.x,\n\t\t\t\t- f0.y, f0.x, 0, - f1.y, f1.x, 0, - f2.y, f2.x, 0\n\t\t\t];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// test 3 face normals from the aabb\n\t\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// finally testing the face normal of the triangle\n\t\t\t// use already existing triangle edge vectors here\n\t\t\ttriangleNormal.crossVectors( f0, f1 );\n\t\t\taxes = [ triangleNormal.x, triangleNormal.y, triangleNormal.z ];\n\t\t\treturn satForAxes( axes );\n\n\t\t};\n\n\t} )(),\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tgetBoundingSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getBoundingSphere( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t\ttarget = new Sphere();\n\n\t\t\t}\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( v1 ).length() * 0.5;\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar points = [\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3()\n\t\t];\n\n\t\treturn function applyMatrix4( matrix ) {\n\n\t\t\t// transform of empty box is an empty box.\n\t\t\tif ( this.isEmpty() ) return this;\n\n\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t\tpoints[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t\tpoints[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t\tpoints[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t\tpoints[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t\tpoints[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t\tpoints[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t\tpoints[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t\tpoints[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix );\t// 111\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Sphere( center, radius ) {\n\n\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\tthis.radius = ( radius !== undefined ) ? radius : 0;\n\n}\n\nObject.assign( Sphere.prototype, {\n\n\tset: function ( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function () {\n\n\t\tvar box = new Box3();\n\n\t\treturn function setFromPoints( points, optionalCenter ) {\n\n\t\t\tvar center = this.center;\n\n\t\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\t\tcenter.copy( optionalCenter );\n\n\t\t\t} else {\n\n\t\t\t\tbox.setFromPoints( points ).getCenter( center );\n\n\t\t\t}\n\n\t\t\tvar maxRadiusSq = 0;\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t},\n\n\tempty: function () {\n\n\t\treturn ( this.radius <= 0 );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t},\n\n\tgetBoundingBox: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Plane( normal, constant ) {\n\n\t// normal is assumed to be normalized\n\n\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n}\n\nObject.assign( Plane.prototype, {\n\n\tset: function ( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponents: function ( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromNormalAndCoplanarPoint: function ( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCoplanarPoints: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function setFromCoplanarPoints( a, b, c ) {\n\n\t\t\tvar normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize();\n\n\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tvar inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t},\n\n\tdistanceToSphere: function ( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t},\n\n\tprojectPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t},\n\n\tintersectLine: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectLine( line, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar direction = line.delta( v1 );\n\n\t\t\tvar denominator = this.normal.dot( direction );\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\t\treturn target.copy( line.start );\n\n\t\t\t\t}\n\n\t\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\tvar t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t\t};\n\n\t}(),\n\n\tintersectsLine: function ( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tvar startSign = this.distanceToPoint( line.start );\n\t\tvar endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t},\n\n\tcoplanarPoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar m1 = new Matrix3();\n\n\t\treturn function applyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\t\tvar normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix );\n\n\t\t\tvar referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix );\n\n\t\t\tvar normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / http://clara.io\n */\n\nfunction Frustum( p0, p1, p2, p3, p4, p5 ) {\n\n\tthis.planes = [\n\n\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t];\n\n}\n\nObject.assign( Frustum.prototype, {\n\n\tset: function ( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tvar planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( frustum ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix: function ( m ) {\n\n\t\tvar planes = this.planes;\n\t\tvar me = m.elements;\n\t\tvar me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tvar me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tvar me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tvar me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\tintersectsObject: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsObject( object ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null )\n\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere )\n\t\t\t\t.applyMatrix4( object.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSprite: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsSprite( sprite ) {\n\n\t\t\tsphere.center.set( 0, 0, 0 );\n\t\t\tsphere.radius = 0.7071067811865476;\n\t\t\tsphere.applyMatrix4( sprite.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar planes = this.planes;\n\t\tvar center = sphere.center;\n\t\tvar negRadius = - sphere.radius;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tvar distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tintersectsBox: function () {\n\n\t\tvar p1 = new Vector3(),\n\t\t\tp2 = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tvar plane = planes[ i ];\n\n\t\t\t\tp1.x = plane.normal.x > 0 ? box.min.x : box.max.x;\n\t\t\t\tp2.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\tp1.y = plane.normal.y > 0 ? box.min.y : box.max.y;\n\t\t\t\tp2.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\tp1.z = plane.normal.z > 0 ? box.min.z : box.max.z;\n\t\t\t\tp2.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\tvar d1 = plane.distanceToPoint( p1 );\n\t\t\t\tvar d2 = plane.distanceToPoint( p2 );\n\n\t\t\t\t// if both outside plane, no intersection\n\n\t\t\t\tif ( d1 < 0 && d2 < 0 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n} );\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\\n\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\\n\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"\\nvec3 transformed = vec3( position );\\n\";\n\nvar beginnormal_vertex = \"\\nvec3 objectNormal = vec3( normal );\\n\";\n\nvar bsdfs = \"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\\t}\\n\\treturn 1.0;\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\\n\\treturn specularColor * AB.x + AB.y;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\\n\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\\n\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\t\\tvarying vec3 vViewPosition;\\n\\t#endif\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\\n\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\";\n\nvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\\n\";\n\nvar color_pars_vertex = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#ifdef USE_COLOR\\n\\tvColor.xyz = color.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.14159265359\\n#define PI2 6.28318530718\\n#define PI_HALF 1.5707963267949\\n#define RECIPROCAL_PI 0.31830988618\\n#define RECIPROCAL_PI2 0.15915494\\n#define LOG2 1.442695\\n#define EPSILON 1e-6\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\n\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n#define cubeUV_textureSize (1024.0)\\nint getFaceFromDirection(vec3 direction) {\\n\\tvec3 absDirection = abs(direction);\\n\\tint face = -1;\\n\\tif( absDirection.x > absDirection.z ) {\\n\\t\\tif(absDirection.x > absDirection.y )\\n\\t\\t\\tface = direction.x > 0.0 ? 0 : 3;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\telse {\\n\\t\\tif(absDirection.z > absDirection.y )\\n\\t\\t\\tface = direction.z > 0.0 ? 2 : 5;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\treturn face;\\n}\\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\\n\\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\\n\\tfloat dxRoughness = dFdx(roughness);\\n\\tfloat dyRoughness = dFdy(roughness);\\n\\tvec3 dx = dFdx( vec * scale * dxRoughness );\\n\\tvec3 dy = dFdy( vec * scale * dyRoughness );\\n\\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\\n\\td = clamp(d, 1.0, cubeUV_rangeClamp);\\n\\tfloat mipLevel = 0.5 * log2(d);\\n\\treturn vec2(floor(mipLevel), fract(mipLevel));\\n}\\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\\n\\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\\n\\tfloat a = 16.0 * cubeUV_rcpTextureSize;\\n\\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\\n\\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\\n\\tfloat powScale = exp2_packed.x * exp2_packed.y;\\n\\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\\n\\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\\n\\tbool bRes = mipLevel == 0.0;\\n\\tscale = bRes && (scale < a) ? a : scale;\\n\\tvec3 r;\\n\\tvec2 offset;\\n\\tint face = getFaceFromDirection(direction);\\n\\tfloat rcpPowScale = 1.0 / powScale;\\n\\tif( face == 0) {\\n\\t\\tr = vec3(direction.x, -direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 1) {\\n\\t\\tr = vec3(direction.y, direction.x, direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 2) {\\n\\t\\tr = vec3(direction.z, direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 3) {\\n\\t\\tr = vec3(direction.x, direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse if( face == 4) {\\n\\t\\tr = vec3(direction.y, direction.x, -direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse {\\n\\t\\tr = vec3(direction.z, -direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\tr = normalize(r);\\n\\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\\n\\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\\n\\tvec2 base = offset + vec2( texelOffset );\\n\\treturn base + s * ( scale - 2.0 * texelOffset );\\n}\\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\\n\\tfloat roughnessVal = roughness* cubeUV_maxLods3;\\n\\tfloat r1 = floor(roughnessVal);\\n\\tfloat r2 = r1 + 1.0;\\n\\tfloat t = fract(roughnessVal);\\n\\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\\n\\tfloat s = mipInfo.y;\\n\\tfloat level0 = mipInfo.x;\\n\\tfloat level1 = level0 + 1.0;\\n\\tlevel1 = level1 > 5.0 ? 5.0 : level1;\\n\\tlevel0 += min( floor( s + 0.5 ), 5.0 );\\n\\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\\n\\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\\n\\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\\n\\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\\n\\tvec4 result = mix(color10, color20, t);\\n\\treturn vec4(result.rgb, 1.0);\\n}\\n#endif\\n\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = normalMatrix * objectNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\\n\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\\n\";\n\nvar encodings_fragment = \" gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = min( floor( D ) / 255.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\\n\\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract(Le);\\n\\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\\n\\treturn vec4( max(vRGB, 0.0), 1.0 );\\n}\\n\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\tvec2 sampleUV;\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\tvec4 envColor = texture2D( envMap, sampleUV );\\n\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\\n\\t\\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\\n\";\n\nvar envmap_pars_fragment = \"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\\n\\tuniform float reflectivity;\\n\\tuniform float envMapIntensity;\\n#endif\\n#ifdef USE_ENVMAP\\n\\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\\n\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\\n\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\n\";\n\nvar fog_vertex = \"\\n#ifdef USE_FOG\\nfogDepth = -mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n varying float fogDepth;\\n#endif\\n\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\\n\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\\n\";\n\nvar gradientmap_pars_fragment = \"#ifdef TOON\\n\\tuniform sampler2D gradientMap;\\n\\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\t\\tfloat dotNL = dot( normal, lightDirection );\\n\\t\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t\\t#ifdef USE_GRADIENTMAP\\n\\t\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar lights_pars_begin = \"uniform vec3 ambientLightColor;\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t\\tfloat shadowCameraNear;\\n\\t\\tfloat shadowCameraFar;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\\n\";\n\nvar lights_pars_maps = \"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\\n\\t\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\t\\tvec2 sampleUV;\\n\\t\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\\n\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tvec3\\tspecularColor;\\n\\tfloat\\tspecularShininess;\\n\\tfloat\\tspecularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifdef TOON\\n\\t\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#else\\n\\t\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\t\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#endif\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\\n\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\\n#ifdef STANDARD\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.clearCoat = saturate( clearCoat );\\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\\n#endif\\n\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tfloat\\tspecularRoughness;\\n\\tvec3\\tspecularColor;\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoat;\\n\\t\\tfloat clearCoatRoughness;\\n\\t#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\\n\\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifndef STANDARD\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\tfloat dotNL = dotNV;\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\\n\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = normalize( vViewPosition );\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearCoatRadiance = vec3( 0.0 );\\n#endif\\n\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#ifndef STANDARD\\n\\t\\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#endif\\n#endif\\n\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\\n#endif\\n\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#ifdef USE_LOGDEPTHBUF\\n\\tuniform float logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n#endif\\n\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n\\tuniform float logDepthBufFC;\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t#else\\n\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\tgl_Position.z *= gl_Position.w;\\n\\t#endif\\n#endif\\n\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\\n\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar map_particle_fragment = \"#ifdef USE_MAP\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n\";\n\nvar map_particle_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform mat3 uvTransform;\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\\n\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n#endif\\n\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_MORPHNORMALS\\n\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\\n\";\n\nvar normal_fragment_begin = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n#endif\\n\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP\\n\\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\\n\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\\n\\t\\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t\\tmapN.xy = normalScale * mapN.xy;\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\\n\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\";\n\nvar project_vertex = \"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\ngl_Position = projectionMatrix * mvPosition;\\n\";\n\nvar dithering_fragment = \"#if defined( DITHERING )\\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar dithering_pars_fragment = \"#if defined( DITHERING )\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\\n\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\\n\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\\n\\t\\tconst vec2 offset = vec2( 0.0, 1.0 );\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / size;\\n\\t\\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\\n\\t\\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\\n\\t\\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\\n\\t\\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\\n\\t\\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\\n\\t\\tvec2 f = fract( uv * size + 0.5 );\\n\\t\\tfloat a = mix( lb, lt, f.y );\\n\\t\\tfloat b = mix( rb, rt, f.y );\\n\\t\\tfloat c = mix( a, b, f.x );\\n\\t\\treturn c;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n#endif\\n\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n#endif\\n\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tDirectionalLight directionalLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tSpotLight spotLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tPointLight pointLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\\n\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\\n\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\\n\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n#endif\\n\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n\\t#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nuniform float toneMappingWhitePoint;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\\nvec3 Uncharted2ToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\n\";\n\nvar uv_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\n\";\n\nvar uv_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = uv2;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n#endif\\n\";\n\nvar cube_frag = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\";\n\nvar cube_vert = \"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\\n\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\\t#endif\\n}\\n\";\n\nvar depth_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n}\\n\";\n\nvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\\n\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\\n\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\";\n\nvar equirect_vert = \"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\\n\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar meshbasic_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include <lightmap_fragment>\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar meshphysical_frag = \"#define PHYSICAL\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifndef STANDARD\\n\\tuniform float clearCoat;\\n\\tuniform float clearCoatRoughness;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <lights_pars_begin>\\n#include <lights_pars_maps>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\\n\";\n\nvar meshphysical_vert = \"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\nvoid main() {\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\\n\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tgl_PointSize = size * ( scale / - mvPosition.z );\\n\\t#else\\n\\t\\tgl_PointSize = size;\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <fog_fragment>\\n}\\n\";\n\nvar shadow_vert = \"#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\\n\";\n\nvar ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_pars_maps: lights_pars_maps,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tcube_frag: cube_frag,\n\tcube_vert: cube_vert,\n\tdepth_frag: depth_frag,\n\tdepth_vert: depth_vert,\n\tdistanceRGBA_frag: distanceRGBA_frag,\n\tdistanceRGBA_vert: distanceRGBA_vert,\n\tequirect_frag: equirect_frag,\n\tequirect_vert: equirect_vert,\n\tlinedashed_frag: linedashed_frag,\n\tlinedashed_vert: linedashed_vert,\n\tmeshbasic_frag: meshbasic_frag,\n\tmeshbasic_vert: meshbasic_vert,\n\tmeshlambert_frag: meshlambert_frag,\n\tmeshlambert_vert: meshlambert_vert,\n\tmeshphong_frag: meshphong_frag,\n\tmeshphong_vert: meshphong_vert,\n\tmeshphysical_frag: meshphysical_frag,\n\tmeshphysical_vert: meshphysical_vert,\n\tnormal_frag: normal_frag,\n\tnormal_vert: normal_vert,\n\tpoints_frag: points_frag,\n\tpoints_vert: points_vert,\n\tshadow_frag: shadow_frag,\n\tshadow_vert: shadow_vert\n};\n\n/**\n * Uniform Utilities\n */\n\nvar UniformsUtils = {\n\n\tmerge: function ( uniforms ) {\n\n\t\tvar merged = {};\n\n\t\tfor ( var u = 0; u < uniforms.length; u ++ ) {\n\n\t\t\tvar tmp = this.clone( uniforms[ u ] );\n\n\t\t\tfor ( var p in tmp ) {\n\n\t\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn merged;\n\n\t},\n\n\tclone: function ( uniforms_src ) {\n\n\t\tvar uniforms_dst = {};\n\n\t\tfor ( var u in uniforms_src ) {\n\n\t\t\tuniforms_dst[ u ] = {};\n\n\t\t\tfor ( var p in uniforms_src[ u ] ) {\n\n\t\t\t\tvar parameter_src = uniforms_src[ u ][ p ];\n\n\t\t\t\tif ( parameter_src && ( parameter_src.isColor ||\n\t\t\t\t\tparameter_src.isMatrix3 || parameter_src.isMatrix4 ||\n\t\t\t\t\tparameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 ||\n\t\t\t\t\tparameter_src.isTexture ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.clone();\n\n\t\t\t\t} else if ( Array.isArray( parameter_src ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.slice();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn uniforms_dst;\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nfunction Color( r, g, b ) {\n\n\tif ( g === undefined && b === undefined ) {\n\n\t\t// r is THREE.Color, hex or string\n\t\treturn this.set( r );\n\n\t}\n\n\treturn this.setRGB( r, g, b );\n\n}\n\nObject.assign( Color.prototype, {\n\n\tisColor: true,\n\n\tr: 1, g: 1, b: 1,\n\n\tset: function ( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetHex: function ( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t},\n\n\tsetRGB: function ( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t},\n\n\tsetHSL: function () {\n\n\t\tfunction hue2rgb( p, q, t ) {\n\n\t\t\tif ( t < 0 ) t += 1;\n\t\t\tif ( t > 1 ) t -= 1;\n\t\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\t\t\tif ( t < 1 / 2 ) return q;\n\t\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\t\t\treturn p;\n\n\t\t}\n\n\t\treturn function setHSL( h, s, l ) {\n\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\th = _Math.euclideanModulo( h, 1 );\n\t\t\ts = _Math.clamp( s, 0, 1 );\n\t\t\tl = _Math.clamp( l, 0, 1 );\n\n\t\t\tif ( s === 0 ) {\n\n\t\t\t\tthis.r = this.g = this.b = l;\n\n\t\t\t} else {\n\n\t\t\t\tvar p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\t\tvar q = ( 2 * l ) - p;\n\n\t\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetStyle: function ( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tvar color;\n\t\t\tvar name = m[ 1 ];\n\t\t\tvar components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tvar h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tvar s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tvar l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tvar hex = m[ 1 ];\n\t\t\tvar size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\t// color keywords\n\t\t\tvar hex = ColorKeywords[ style ];\n\n\t\t\tif ( hex !== undefined ) {\n\n\t\t\t\t// red\n\t\t\t\tthis.setHex( hex );\n\n\t\t\t} else {\n\n\t\t\t\t// unknown color\n\t\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t},\n\n\tcopy: function ( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t},\n\n\tcopyGammaToLinear: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tcopyLinearToGamma: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tvar safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t},\n\n\tconvertGammaToLinear: function () {\n\n\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\tthis.r = r * r;\n\t\tthis.g = g * g;\n\t\tthis.b = b * b;\n\n\t\treturn this;\n\n\t},\n\n\tconvertLinearToGamma: function () {\n\n\t\tthis.r = Math.sqrt( this.r );\n\t\tthis.g = Math.sqrt( this.g );\n\t\tthis.b = Math.sqrt( this.b );\n\n\t\treturn this;\n\n\t},\n\n\tgetHex: function () {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t},\n\n\tgetHexString: function () {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t},\n\n\tgetHSL: function ( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t}\n\n\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\tvar max = Math.max( r, g, b );\n\t\tvar min = Math.min( r, g, b );\n\n\t\tvar hue, saturation;\n\t\tvar lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tvar delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t},\n\n\tgetStyle: function () {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t},\n\n\toffsetHSL: function () {\n\n\t\tvar hsl = {};\n\n\t\treturn function ( h, s, l ) {\n\n\t\t\tthis.getHSL( hsl );\n\n\t\t\thsl.h += h; hsl.s += s; hsl.l += l;\n\n\t\t\tthis.setHSL( hsl.h, hsl.s, hsl.l );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t},\n\n\taddColors: function ( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t},\n\n\tlerp: function ( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn this.getHex();\n\n\t}\n\n} );\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nvar UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 },\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n */\n\nvar ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 0.5 },\n\t\t\t\tmetalness: { value: 0.5 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.normal_vert,\n\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t},\n\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearCoat: { value: 0 },\n\t\t\tclearCoatRoughness: { value: 0 }\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLAttributes( gl ) {\n\n\tvar buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;\n\n\t\tvar buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tvar type = gl.FLOAT;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( attribute.dynamic === false ) {\n\n\t\t\tgl.bufferData( bufferType, array, gl.STATIC_DRAW );\n\n\t\t} else if ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else if ( updateRange.count === 0 ) {\n\n\t\t\tconsole.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' );\n\n\t\t} else {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Euler( x, y, z, order ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._order = order || Euler.DefaultOrder;\n\n}\n\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nEuler.DefaultOrder = 'XYZ';\n\nObject.defineProperties( Euler.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\torder: {\n\n\t\tget: function () {\n\n\t\t\treturn this._order;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._order = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Euler.prototype, {\n\n\tisEuler: true,\n\n\tset: function ( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t},\n\n\tcopy: function ( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m, order, update ) {\n\n\t\tvar clamp = _Math.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements;\n\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._y = 0;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromQuaternion: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function setFromQuaternion( q, order, update ) {\n\n\t\t\tmatrix.makeRotationFromQuaternion( q );\n\n\t\t\treturn this.setFromRotationMatrix( matrix, order, update );\n\n\t\t};\n\n\t}(),\n\n\tsetFromVector3: function ( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t},\n\n\treorder: function () {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\tvar q = new Quaternion();\n\n\t\treturn function reorder( newOrder ) {\n\n\t\t\tq.setFromEuler( this );\n\n\t\t\treturn this.setFromQuaternion( q, newOrder );\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t},\n\n\tfromArray: function ( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t},\n\n\ttoVector3: function ( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Layers() {\n\n\tthis.mask = 1 | 0;\n\n}\n\nObject.assign( Layers.prototype, {\n\n\tset: function ( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t},\n\n\tenable: function ( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t},\n\n\ttoggle: function ( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t},\n\n\tdisable: function ( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t},\n\n\ttest: function ( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author elephantatwork / www.elephantatwork.ch\n */\n\nvar object3DId = 0;\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: object3DId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Object3D';\n\n\tthis.parent = null;\n\tthis.children = [];\n\n\tthis.up = Object3D.DefaultUp.clone();\n\n\tvar position = new Vector3();\n\tvar rotation = new Euler();\n\tvar quaternion = new Quaternion();\n\tvar scale = new Vector3( 1, 1, 1 );\n\n\tfunction onRotationChange() {\n\n\t\tquaternion.setFromEuler( rotation, false );\n\n\t}\n\n\tfunction onQuaternionChange() {\n\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t}\n\n\trotation.onChange( onRotationChange );\n\tquaternion.onChange( onQuaternionChange );\n\n\tObject.defineProperties( this, {\n\t\tposition: {\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tenumerable: true,\n\t\t\tvalue: scale\n\t\t},\n\t\tmodelViewMatrix: {\n\t\t\tvalue: new Matrix4()\n\t\t},\n\t\tnormalMatrix: {\n\t\t\tvalue: new Matrix3()\n\t\t}\n\t} );\n\n\tthis.matrix = new Matrix4();\n\tthis.matrixWorld = new Matrix4();\n\n\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\tthis.matrixWorldNeedsUpdate = false;\n\n\tthis.layers = new Layers();\n\tthis.visible = true;\n\n\tthis.castShadow = false;\n\tthis.receiveShadow = false;\n\n\tthis.frustumCulled = true;\n\tthis.renderOrder = 0;\n\n\tthis.userData = {};\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Object3D,\n\n\tisObject3D: true,\n\n\tonBeforeRender: function () {},\n\tonAfterRender: function () {},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t},\n\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t},\n\n\tsetRotationFromEuler: function ( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t},\n\n\tsetRotationFromMatrix: function ( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t},\n\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t},\n\n\trotateOnAxis: function () {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.multiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateOnWorldAxis: function () {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnWorldAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.premultiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\ttranslateOnAxis: function () {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function translateOnAxis( axis, distance ) {\n\n\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function translateX( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function translateY( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function translateZ( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function () {\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function worldToLocal( vector ) {\n\n\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\t// This method does not support objects with rotated and/or translated parent(s)\n\n\t\tvar m1 = new Matrix4();\n\t\tvar vector = new Vector3();\n\n\t\treturn function lookAt( x, y, z ) {\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\tvector.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( x, y, z );\n\n\t\t\t}\n\n\t\t\tif ( this.isCamera ) {\n\n\t\t\t\tm1.lookAt( this.position, vector, this.up );\n\n\t\t\t} else {\n\n\t\t\t\tm1.lookAt( vector, this.position, this.up );\n\n\t\t\t}\n\n\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( ( object && object.isObject3D ) ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tobject.dispatchEvent( { type: 'added' } );\n\n\t\t\tthis.children.push( object );\n\n\t\t} else {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tremove: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( { type: 'removed' } );\n\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetObjectById: function ( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t},\n\n\tgetObjectByName: function ( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t},\n\n\tgetObjectByProperty: function ( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tvar child = this.children[ i ];\n\t\t\tvar object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tgetWorldPosition: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t},\n\n\tgetWorldQuaternion: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar scale = new Vector3();\n\n\t\treturn function getWorldQuaternion( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\t\ttarget = new Quaternion();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, target, scale );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldScale: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldScale( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, target );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldDirection: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t};\n\n\t}(),\n\n\traycast: function () {},\n\n\ttraverse: function ( callback ) {\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseVisible: function ( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseAncestors: function ( callback ) {\n\n\t\tvar parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t},\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tvar output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tvar object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.geometry !== undefined ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tvar parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tvar shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tvar uuids = [];\n\n\t\t\t\tfor ( var i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( var i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tvar geometries = extractFromCache( meta.geometries );\n\t\t\tvar materials = extractFromCache( meta.materials );\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\t\t\tvar shapes = extractFromCache( meta.shapes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\t\t\treturn values;\n\n\t\t}\n\n\t},\n\n\tclone: function ( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t},\n\n\tcopy: function ( source, recursive ) {\n\n\t\tif ( recursive === undefined ) recursive = true;\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( var i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tvar child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author WestLangley / http://github.com/WestLangley\n*/\n\nfunction Camera() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Camera';\n\n\tthis.matrixWorldInverse = new Matrix4();\n\tthis.projectionMatrix = new Matrix4();\n\n}\n\nCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Camera,\n\n\tisCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t};\n\n\t}(),\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tthis.matrixWorldInverse.getInverse( this.matrixWorld );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author arose / http://github.com/arose\n */\n\nfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'OrthographicCamera';\n\n\tthis.zoom = 1;\n\tthis.view = null;\n\n\tthis.left = left;\n\tthis.right = right;\n\tthis.top = top;\n\tthis.bottom = bottom;\n\n\tthis.near = ( near !== undefined ) ? near : 0.1;\n\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\tthis.updateProjectionMatrix();\n\n}\n\nOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: OrthographicCamera,\n\n\tisOrthographicCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t},\n\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tvar cx = ( this.right + this.left ) / 2;\n\t\tvar cy = ( this.top + this.bottom ) / 2;\n\n\t\tvar left = cx - dx;\n\t\tvar right = cx + dx;\n\t\tvar top = cy + dy;\n\t\tvar bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar zoomW = this.zoom / ( this.view.width / this.view.fullWidth );\n\t\t\tvar zoomH = this.zoom / ( this.view.height / this.view.fullHeight );\n\t\t\tvar scaleW = ( this.right - this.left ) / this.view.width;\n\t\t\tvar scaleH = ( this.top - this.bottom ) / this.view.height;\n\n\t\t\tleft += scaleW * ( this.view.offsetX / zoomW );\n\t\t\tright = left + scaleW * ( this.view.width / zoomW );\n\t\t\ttop -= scaleH * ( this.view.offsetY / zoomH );\n\t\t\tbottom = top - scaleH * ( this.view.height / zoomH );\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Face3( a, b, c, normal, color, materialIndex ) {\n\n\tthis.a = a;\n\tthis.b = b;\n\tthis.c = c;\n\n\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\tthis.color = ( color && color.isColor ) ? color : new Color();\n\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\tthis.materialIndex = materialIndex !== undefined ? materialIndex : 0;\n\n}\n\nObject.assign( Face3.prototype, {\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author bhouston / http://clara.io\n */\n\nvar geometryId = 0; // Geometry uses even numbers as Id\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: geometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tvar scope = this;\n\n\t\tvar indices = geometry.index !== null ? geometry.index.array : undefined;\n\t\tvar attributes = geometry.attributes;\n\n\t\tvar positions = attributes.position.array;\n\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\n\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\n\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\n\t\tvar uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;\n\n\t\tif ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tvar tempNormals = [];\n\t\tvar tempUVs = [];\n\t\tvar tempUVs2 = [];\n\n\t\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\tscope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) );\n\n\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\ttempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\ttempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\ttempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\n\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\n\n\t\t\tvar face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( var i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tvar start = group.start;\n\t\t\t\tvar count = group.count;\n\n\t\t\t\tfor ( var j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\t\taddFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var i = 0; i < positions.length / 3; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tvar center = this.boundingSphere.center;\n\t\tvar radius = this.boundingSphere.radius;\n\n\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tvar matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tvar face = this.faces[ f ];\n\n\t\t\tvar vA = this.vertices[ face.a ];\n\t\t\tvar vB = this.vertices[ face.b ];\n\t\t\tvar vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted ) {\n\n\t\tif ( areaWeighted === undefined ) areaWeighted = true;\n\n\t\tvar v, vl, f, fl, face, vertices;\n\n\t\tvertices = new Array( this.vertices.length );\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvA = this.vertices[ face.a ];\n\t\t\t\tvB = this.vertices[ face.b ];\n\t\t\t\tvC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tvar f, fl, face;\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\tvar i, il, f, fl, face;\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tvar tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tfaceNormal = new Vector3();\n\t\t\t\t\tvertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t// store morph normals\n\n\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar normalMatrix,\n\t\t\tvertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tuvs1 = this.faceVertexUvs[ 0 ],\n\t\t\tuvs2 = geometry.faceVertexUvs[ 0 ],\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = vertices2[ i ];\n\n\t\t\tvar vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( var i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\n\t\t\t\tfaceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tfaceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\n\n\t\t\tvar uv = uvs2[ i ], uvCopy = [];\n\n\t\t\tif ( uv === undefined ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\n\n\t\t\t\tuvCopy.push( uv[ j ].clone() );\n\n\t\t\t}\n\n\t\t\tuvs1.push( uvCopy );\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function () {\n\n\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tvar unique = [], changes = [];\n\n\t\tvar v, key;\n\t\tvar precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n\t\tvar precision = Math.pow( 10, precisionPoints );\n\t\tvar i, il, face;\n\t\tvar indices, j, jl;\n\n\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tv = this.vertices[ i ];\n\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tvar faceIndicesToRemove = [];\n\n\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tface = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tindices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( var n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tvar idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tvar diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tvar faces = this.faces;\n\t\tvar length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tvar uvs1 = this.faceVertexUvs[ 0 ];\n\t\tvar uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tvar newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tvar vertices = [];\n\n\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tvar faces = [];\n\t\tvar normals = [];\n\t\tvar normalsHash = {};\n\t\tvar colors = [];\n\t\tvar colorsHash = {};\n\t\tvar uvs = [];\n\t\tvar uvsHash = {};\n\n\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\n\t\t\tvar hasMaterial = true;\n\t\t\tvar hasFaceUv = false; // deprecated\n\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tvar hasFaceNormal = face.normal.length() > 0;\n\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tvar faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tvar hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar i, il, j, jl, k, kl;\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tvar vertices = source.vertices;\n\n\t\tfor ( i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tvar colors = source.colors;\n\n\t\tfor ( i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tvar faces = source.faces;\n\n\t\tfor ( i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tvar faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tvar uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tvar uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphTargets = source.morphTargets;\n\n\t\tfor ( i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tvar morphNormals = source.morphNormals;\n\n\t\tfor ( i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tvar morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tvar destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tvar skinWeights = source.skinWeights;\n\n\t\tfor ( i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tvar skinIndices = source.skinIndices;\n\n\t\tfor ( i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tvar lineDistances = source.lineDistances;\n\n\t\tfor ( i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferAttribute( array, itemSize, normalized ) {\n\n\tif ( Array.isArray( array ) ) {\n\n\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t}\n\n\tthis.name = '';\n\n\tthis.array = array;\n\tthis.itemSize = itemSize;\n\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\tthis.normalized = normalized === true;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\n\tisBufferAttribute: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.itemSize : 0;\n\t\tthis.array = array;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyArray: function ( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t},\n\n\tcopyColorsArray: function ( colors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tvar color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector2sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector3sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector4sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n} );\n\n//\n\nfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n}\n\nInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\nfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n}\n\nUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\nfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n}\n\nUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\nfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n}\n\nInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\nfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\nfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n}\n\nInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\nfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n}\n\nUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\nfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n}\n\nFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\nfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n}\n\nFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectGeometry() {\n\n\tthis.vertices = [];\n\tthis.normals = [];\n\tthis.colors = [];\n\tthis.uvs = [];\n\tthis.uvs2 = [];\n\n\tthis.groups = [];\n\n\tthis.morphTargets = {};\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\t// this.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.verticesNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nObject.assign( DirectGeometry.prototype, {\n\n\tcomputeGroups: function ( geometry ) {\n\n\t\tvar group;\n\t\tvar groups = [];\n\t\tvar materialIndex = undefined;\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tvar faces = geometry.faces;\n\t\tvar vertices = geometry.vertices;\n\t\tvar faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tvar hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tvar morphTargets = geometry.morphTargets;\n\t\tvar morphTargetsLength = morphTargets.length;\n\n\t\tvar morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( var i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = [];\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tvar morphNormals = geometry.morphNormals;\n\t\tvar morphNormalsLength = morphNormals.length;\n\n\t\tvar morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( var i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = [];\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tvar skinIndices = geometry.skinIndices;\n\t\tvar skinWeights = geometry.skinWeights;\n\n\t\tvar hasSkinIndices = skinIndices.length === vertices.length;\n\t\tvar hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( var j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tvar morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tvar max = array[ 0 ];\n\n\tfor ( var i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\nfunction BufferGeometry() {\n\n\tObject.defineProperty( this, 'id', { value: bufferGeometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'BufferGeometry';\n\n\tthis.index = null;\n\tthis.attributes = {};\n\n\tthis.morphAttributes = {};\n\n\tthis.groups = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\tthis.drawRange = { start: 0, count: Infinity };\n\n}\n\nBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: BufferGeometry,\n\n\tisBufferGeometry: true,\n\n\tgetIndex: function () {\n\n\t\treturn this.index;\n\n\t},\n\n\tsetIndex: function ( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t},\n\n\taddAttribute: function ( name, attribute ) {\n\n\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\tthis.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( name === 'index' ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\tthis.setIndex( attribute );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t},\n\n\tgetAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t},\n\n\tremoveAttribute: function ( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t},\n\n\taddGroup: function ( start, count, materialIndex ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex !== undefined ? materialIndex : 0\n\n\t\t} );\n\n\t},\n\n\tclearGroups: function () {\n\n\t\tthis.groups = [];\n\n\t},\n\n\tsetDrawRange: function ( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tmatrix.applyToBufferAttribute( position );\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tvar normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormalMatrix.applyToBufferAttribute( normal );\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\tvar positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\tvar colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\tthis.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\tthis.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\tvar lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\tthis.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t} else if ( object.isMesh ) {\n\n\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tvar position = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t},\n\n\tupdateFromObject: function ( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tvar direct = geometry.__directGeometry;\n\n\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\tdirect = undefined;\n\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( direct === undefined ) {\n\n\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\tgeometry = direct;\n\n\t\t}\n\n\t\tvar attribute;\n\n\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.position;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.normal;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.color;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.uv;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.lineDistance;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t},\n\n\tfromDirectGeometry: function ( geometry ) {\n\n\t\tvar positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tthis.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tvar normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tthis.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tvar colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tthis.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tvar uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tthis.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tvar uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tthis.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tthis.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( var name in geometry.morphTargets ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( var i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ i ];\n\n\t\t\t\tvar attribute = new Float32BufferAttribute( morphTarget.length * 3, 3 );\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tvar skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tvar skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tvar box = new Box3();\n\t\tvar vector = new Vector3();\n\n\t\treturn function computeBoundingSphere() {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif ( position ) {\n\n\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\tbox.setFromBufferAttribute( position );\n\t\t\t\tbox.getCenter( center );\n\n\t\t\t\t// hoping to find a boundingSphere with a radius smaller than the\n\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor ( var i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t\tvector.x = position.getX( i );\n\t\t\t\t\tvector.y = position.getY( i );\n\t\t\t\t\tvector.z = position.getZ( i );\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\tcomputeFaceNormals: function () {\n\n\t\t// backwards compatibility\n\n\t},\n\n\tcomputeVertexNormals: function () {\n\n\t\tvar index = this.index;\n\t\tvar attributes = this.attributes;\n\t\tvar groups = this.groups;\n\n\t\tif ( attributes.position ) {\n\n\t\t\tvar positions = attributes.position.array;\n\n\t\t\tif ( attributes.normal === undefined ) {\n\n\t\t\t\tthis.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tvar array = attributes.normal.array;\n\n\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t\tarray[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar normals = attributes.normal.array;\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tvar indices = index.array;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tthis.addGroup( 0, indices.length );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = groups.length; j < jl; ++ j ) {\n\n\t\t\t\t\tvar group = groups[ j ];\n\n\t\t\t\t\tvar start = group.start;\n\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\n\n\t\t\t\t\t\tvA = indices[ i + 0 ] * 3;\n\t\t\t\t\t\tvB = indices[ i + 1 ] * 3;\n\t\t\t\t\t\tvC = indices[ i + 2 ] * 3;\n\n\t\t\t\t\t\tpA.fromArray( positions, vA );\n\t\t\t\t\t\tpB.fromArray( positions, vB );\n\t\t\t\t\t\tpC.fromArray( positions, vC );\n\n\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\tnormals[ vA ] += cb.x;\n\t\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vB ] += cb.x;\n\t\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vC ] += cb.x;\n\t\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\n\n\t\t\t\t\tpA.fromArray( positions, i );\n\t\t\t\t\tpB.fromArray( positions, i + 3 );\n\t\t\t\t\tpC.fromArray( positions, i + 6 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormals[ i ] = cb.x;\n\t\t\t\t\tnormals[ i + 1 ] = cb.y;\n\t\t\t\t\tnormals[ i + 2 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 3 ] = cb.x;\n\t\t\t\t\tnormals[ i + 4 ] = cb.y;\n\t\t\t\t\tnormals[ i + 5 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 6 ] = cb.x;\n\t\t\t\t\tnormals[ i + 7 ] = cb.y;\n\t\t\t\t\tnormals[ i + 8 ] = cb.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tattributes.normal.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tvar attribute1 = attributes[ key ];\n\t\t\tvar attributeArray1 = attribute1.array;\n\n\t\t\tvar attribute2 = geometry.attributes[ key ];\n\t\t\tvar attributeArray2 = attribute2.array;\n\n\t\t\tvar attributeSize = attribute2.itemSize;\n\n\t\t\tfor ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tnormalizeNormals: function () {\n\n\t\tvar vector = new Vector3();\n\n\t\treturn function normalizeNormals() {\n\n\t\t\tvar normals = this.attributes.normal;\n\n\t\t\tfor ( var i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t\tvector.x = normals.getX( i );\n\t\t\t\tvector.y = normals.getY( i );\n\t\t\t\tvector.z = normals.getZ( i );\n\n\t\t\t\tvector.normalize();\n\n\t\t\t\tnormals.setXYZ( i, vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoNonIndexed: function () {\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar geometry2 = new BufferGeometry();\n\n\t\tvar indices = this.index.array;\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tvar index = 0, index2 = 0;\n\n\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tdata.data = { attributes: {} };\n\n\t\tvar index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tvar array = Array.prototype.slice.call( index.array );\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: array\n\t\t\t};\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\n\t\t\tvar array = Array.prototype.slice.call( attribute.array );\n\n\t\t\tdata.data.attributes[ key ] = {\n\t\t\t\titemSize: attribute.itemSize,\n\t\t\t\ttype: attribute.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: attribute.normalized\n\t\t\t};\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tvar boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar name, i, l;\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tvar index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone() );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tvar attributes = source.attributes;\n\n\t\tfor ( name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\t\t\tthis.addAttribute( name, attribute.clone() );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tvar morphAttributes = source.morphAttributes;\n\n\t\tfor ( name in morphAttributes ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone() );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// groups\n\n\t\tvar groups = source.groups;\n\n\t\tfor ( i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// BoxGeometry\n\nfunction BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'BoxGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\tthis.mergeVertices();\n\n}\n\nBoxGeometry.prototype = Object.create( Geometry.prototype );\nBoxGeometry.prototype.constructor = BoxGeometry;\n\n// BoxBufferGeometry\n\nfunction BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'BoxBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tvar scope = this;\n\n\twidth = width || 1;\n\theight = height || 1;\n\tdepth = depth || 1;\n\n\t// segments\n\n\twidthSegments = Math.floor( widthSegments ) || 1;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\tdepthSegments = Math.floor( depthSegments ) || 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar numberOfVertices = 0;\n\tvar groupStart = 0;\n\n\t// build each side of the box geometry\n\n\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\tvar segmentWidth = width / gridX;\n\t\tvar segmentHeight = height / gridY;\n\n\t\tvar widthHalf = width / 2;\n\t\tvar heightHalf = height / 2;\n\t\tvar depthHalf = depth / 2;\n\n\t\tvar gridX1 = gridX + 1;\n\t\tvar gridY1 = gridY + 1;\n\n\t\tvar vertexCounter = 0;\n\t\tvar groupCount = 0;\n\n\t\tvar ix, iy;\n\n\t\tvar vector = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tvar y = iy * segmentHeight - heightHalf;\n\n\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tvar x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = 0;\n\t\t\t\tvector[ v ] = 0;\n\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// uvs\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t// counters\n\n\t\t\t\tvertexCounter += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\t// 1. you need three indices to draw a single face\n\t\t// 2. a single segment consists of two faces\n\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tvar a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\tvar b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\tvar c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tvar d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// increase counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t\t// update total number of vertices\n\n\t\tnumberOfVertices += vertexCounter;\n\n\t}\n\n}\n\nBoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nBoxBufferGeometry.prototype.constructor = BoxBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PlaneGeometry\n\nfunction PlaneGeometry( width, height, widthSegments, heightSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PlaneGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\tthis.mergeVertices();\n\n}\n\nPlaneGeometry.prototype = Object.create( Geometry.prototype );\nPlaneGeometry.prototype.constructor = PlaneGeometry;\n\n// PlaneBufferGeometry\n\nfunction PlaneBufferGeometry( width, height, widthSegments, heightSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PlaneBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\twidth = width || 1;\n\theight = height || 1;\n\n\tvar width_half = width / 2;\n\tvar height_half = height / 2;\n\n\tvar gridX = Math.floor( widthSegments ) || 1;\n\tvar gridY = Math.floor( heightSegments ) || 1;\n\n\tvar gridX1 = gridX + 1;\n\tvar gridY1 = gridY + 1;\n\n\tvar segment_width = width / gridX;\n\tvar segment_height = height / gridY;\n\n\tvar ix, iy;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\tvar y = iy * segment_height - height_half;\n\n\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\tvar x = ix * segment_width - width_half;\n\n\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\tuvs.push( ix / gridX );\n\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\tvar a = ix + gridX1 * iy;\n\t\t\tvar b = ix + gridX1 * ( iy + 1 );\n\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nPlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nvar materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\tthis.lights = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors\n\n\tthis.opacity = 1;\n\tthis.transparent = false;\n\n\tthis.blendSrc = SrcAlphaFactor;\n\tthis.blendDst = OneMinusSrcAlphaFactor;\n\tthis.blendEquation = AddEquation;\n\tthis.blendSrcAlpha = null;\n\tthis.blendDstAlpha = null;\n\tthis.blendEquationAlpha = null;\n\n\tthis.depthFunc = LessEqualDepth;\n\tthis.depthTest = true;\n\tthis.depthWrite = true;\n\n\tthis.clippingPlanes = null;\n\tthis.clipIntersection = false;\n\tthis.clipShadows = false;\n\n\tthis.shadowSide = null;\n\n\tthis.colorWrite = true;\n\n\tthis.precision = null; // override the renderer's default precision for this material\n\n\tthis.polygonOffset = false;\n\tthis.polygonOffsetFactor = 0;\n\tthis.polygonOffsetUnits = 0;\n\n\tthis.dithering = false;\n\n\tthis.alphaTest = 0;\n\tthis.premultipliedAlpha = false;\n\n\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\n\n\tthis.visible = true;\n\n\tthis.userData = {};\n\n\tthis.needsUpdate = true;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function () {},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( var key in values ) {\n\n\t\t\tvar newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else if ( key === 'overdraw' ) {\n\n\t\t\t\t// ensure overdraw is backwards-compatible with legacy boolean type\n\t\t\t\tthis[ key ] = Number( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat;\n\t\tif ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness;\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\n\t\t}\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.flatShading = source.flatShading;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.overdraw = source.overdraw;\n\n\t\tthis.visible = source.visible;\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.clipShadows = source.clipShadows;\n\t\tthis.clipIntersection = source.clipIntersection;\n\n\t\tvar srcPlanes = source.clippingPlanes,\n\t\t\tdstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tvar n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n * map: new THREE.Texture( <Image> ),\n *\n * lightMap: new THREE.Texture( <Image> ),\n * lightMapIntensity: <float>\n *\n * aoMap: new THREE.Texture( <Image> ),\n * aoMapIntensity: <float>\n *\n * specularMap: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: <float>,\n * refractionRatio: <float>,\n *\n * depthTest: <bool>,\n * depthWrite: <bool>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>\n * }\n */\n\nfunction MeshBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshBasicMaterial';\n\n\tthis.color = new Color( 0xffffff ); // emissive\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshBasicMaterial.prototype = Object.create( Material.prototype );\nMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: <string>,\n * vertexShader: <string>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * lights: <bool>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction ShaderMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShaderMaterial';\n\n\tthis.defines = {};\n\tthis.uniforms = {};\n\n\tthis.vertexShader = 'void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}';\n\tthis.fragmentShader = 'void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}';\n\n\tthis.linewidth = 1;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false; // set to use scene fog\n\tthis.lights = false; // set to use scene lights\n\tthis.clipping = false; // set to use user-defined clipping planes\n\n\tthis.skinning = false; // set to use skinning attribute streams\n\tthis.morphTargets = false; // set to use morph targets\n\tthis.morphNormals = false; // set to use morph normals\n\n\tthis.extensions = {\n\t\tderivatives: false, // set to use derivatives\n\t\tfragDepth: false, // set to use fragment depth values\n\t\tdrawBuffers: false, // set to use draw buffers\n\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t};\n\n\t// When rendered geometry doesn't include these attributes but the material does,\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\tthis.defaultAttributeValues = {\n\t\t'color': [ 1, 1, 1 ],\n\t\t'uv': [ 0, 0 ],\n\t\t'uv2': [ 0, 0 ]\n\t};\n\n\tthis.index0AttributeName = undefined;\n\tthis.uniformsNeedUpdate = false;\n\n\tif ( parameters !== undefined ) {\n\n\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nShaderMaterial.prototype = Object.create( Material.prototype );\nShaderMaterial.prototype.constructor = ShaderMaterial;\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nShaderMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.fragmentShader = source.fragmentShader;\n\tthis.vertexShader = source.vertexShader;\n\n\tthis.uniforms = UniformsUtils.clone( source.uniforms );\n\n\tthis.defines = source.defines;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.lights = source.lights;\n\tthis.clipping = source.clipping;\n\n\tthis.skinning = source.skinning;\n\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.extensions = source.extensions;\n\n\treturn this;\n\n};\n\nShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\tvar data = Material.prototype.toJSON.call( this, meta );\n\n\tdata.uniforms = this.uniforms;\n\tdata.vertexShader = this.vertexShader;\n\tdata.fragmentShader = this.fragmentShader;\n\n\treturn data;\n\n};\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Ray( origin, direction ) {\n\n\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\tthis.direction = ( direction !== undefined ) ? direction : new Vector3();\n\n}\n\nObject.assign( Ray.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t},\n\n\tlookAt: function ( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\trecast: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function recast( t ) {\n\n\t\t\tthis.origin.copy( this.at( t, v1 ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tvar directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t},\n\n\tdistanceSqToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceSqToPoint( point ) {\n\n\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t// point behind the ray\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t}\n\n\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\treturn v1.distanceToSquared( point );\n\n\t\t};\n\n\t}(),\n\n\tdistanceSqToSegment: function () {\n\n\t\tvar segCenter = new Vector3();\n\t\tvar segDir = new Vector3();\n\t\tvar diff = new Vector3();\n\n\t\treturn function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t// defined by v0 and v1\n\t\t\t// It can also set two optional targets :\n\t\t\t// - The closest point on the ray\n\t\t\t// - The closest point on the segment\n\n\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\tdiff.copy( this.origin ).sub( segCenter );\n\n\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\tvar a01 = - this.direction.dot( segDir );\n\t\t\tvar b0 = diff.dot( this.direction );\n\t\t\tvar b1 = - diff.dot( segDir );\n\t\t\tvar c = diff.lengthSq();\n\t\t\tvar det = Math.abs( 1 - a01 * a01 );\n\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\tif ( det > 0 ) {\n\n\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\textDet = segExtent * det;\n\n\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 5\n\n\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnRay ) {\n\n\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\n\n\t\t\t}\n\n\t\t\treturn sqrDist;\n\n\t\t};\n\n\t}(),\n\n\tintersectSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectSphere( sphere, target ) {\n\n\t\t\tv1.subVectors( sphere.center, this.origin );\n\t\t\tvar tca = v1.dot( this.direction );\n\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\n\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\tvar thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\tvar t0 = tca - thc;\n\n\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\tvar t1 = tca + thc;\n\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t// test to see if t0 is behind the ray:\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\treturn this.at( t0, target );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) <= sphere.radius;\n\n\t},\n\n\tdistanceToPlane: function ( plane ) {\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t},\n\n\tintersectPlane: function ( plane, target ) {\n\n\t\tvar t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tvar distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t},\n\n\tintersectBox: function ( box, target ) {\n\n\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tvar invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tvar origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t},\n\n\tintersectsBox: ( function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\treturn this.intersectBox( box, v ) !== null;\n\n\t\t};\n\n\t} )(),\n\n\tintersectTriangle: function () {\n\n\t\t// Compute the offset origin, edges, and normal.\n\t\tvar diff = new Vector3();\n\t\tvar edge1 = new Vector3();\n\t\tvar edge2 = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\treturn function intersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\tedge1.subVectors( b, a );\n\t\t\tedge2.subVectors( c, a );\n\t\t\tnormal.crossVectors( edge1, edge2 );\n\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\tvar DdN = this.direction.dot( normal );\n\t\t\tvar sign;\n\n\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\tsign = 1;\n\n\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\tsign = - 1;\n\t\t\t\tDdN = - DdN;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tdiff.subVectors( this.origin, a );\n\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\n\n\t\t\t// b1 < 0, no intersection\n\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\n\n\t\t\t// b2 < 0, no intersection\n\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// b1+b2 > 1, no intersection\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Line intersects triangle, check if ray does.\n\t\t\tvar QdN = - sign * diff.dot( normal );\n\n\t\t\t// t < 0, no intersection\n\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Ray intersects triangle.\n\t\t\treturn this.at( QdN / DdN, target );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix4: function ( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Line3( start, end ) {\n\n\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n}\n\nObject.assign( Line3.prototype, {\n\n\tset: function ( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t},\n\n\tdelta: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t},\n\n\tdistanceSq: function () {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t},\n\n\tdistance: function () {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tclosestPointToPointParameter: function () {\n\n\t\tvar startP = new Vector3();\n\t\tvar startEnd = new Vector3();\n\n\t\treturn function closestPointToPointParameter( point, clampToLine ) {\n\n\t\t\tstartP.subVectors( point, this.start );\n\t\t\tstartEnd.subVectors( this.end, this.start );\n\n\t\t\tvar startEnd2 = startEnd.dot( startEnd );\n\t\t\tvar startEnd_startP = startEnd.dot( startP );\n\n\t\t\tvar t = startEnd_startP / startEnd2;\n\n\t\t\tif ( clampToLine ) {\n\n\t\t\t\tt = _Math.clamp( t, 0, 1 );\n\n\t\t\t}\n\n\t\t\treturn t;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, clampToLine, target ) {\n\n\t\tvar t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Triangle( a, b, c ) {\n\n\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n}\n\nObject.assign( Triangle, {\n\n\tgetNormal: function () {\n\n\t\tvar v0 = new Vector3();\n\n\t\treturn function getNormal( a, b, c, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( c, b );\n\t\t\tv0.subVectors( a, b );\n\t\t\ttarget.cross( v0 );\n\n\t\t\tvar targetLengthSq = target.lengthSq();\n\t\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t\t}\n\n\t\t\treturn target.set( 0, 0, 0 );\n\n\t\t};\n\n\t}(),\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tgetBarycoord: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function getBarycoord( point, a, b, c, target ) {\n\n\t\t\tv0.subVectors( c, a );\n\t\t\tv1.subVectors( b, a );\n\t\t\tv2.subVectors( point, a );\n\n\t\t\tvar dot00 = v0.dot( v0 );\n\t\t\tvar dot01 = v0.dot( v1 );\n\t\t\tvar dot02 = v0.dot( v2 );\n\t\t\tvar dot11 = v1.dot( v1 );\n\t\t\tvar dot12 = v1.dot( v2 );\n\n\t\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\t// collinear or singular triangle\n\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t\t}\n\n\t\t\tvar invDenom = 1 / denom;\n\t\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t// barycentric coordinates must always sum to 1\n\t\t\treturn target.set( 1 - u - v, v, u );\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function containsPoint( point, a, b, c ) {\n\n\t\t\tTriangle.getBarycoord( point, a, b, c, v1 );\n\n\t\t\treturn ( v1.x >= 0 ) && ( v1.y >= 0 ) && ( ( v1.x + v1.y ) <= 1 );\n\n\t\t};\n\n\t}()\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tset: function ( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t},\n\n\tgetArea: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getArea() {\n\n\t\t\tv0.subVectors( this.c, this.b );\n\t\t\tv1.subVectors( this.a, this.b );\n\n\t\t\treturn v0.cross( v1 ).length() * 0.5;\n\n\t\t};\n\n\t}(),\n\n\tgetMidpoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t},\n\n\tgetNormal: function ( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t},\n\n\tgetPlane: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t},\n\n\tgetBarycoord: function ( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t},\n\n\tclosestPointToPoint: function () {\n\n\t\tvar plane = new Plane();\n\t\tvar edgeList = [ new Line3(), new Line3(), new Line3() ];\n\t\tvar projectedPoint = new Vector3();\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function closestPointToPoint( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar minDistance = Infinity;\n\n\t\t\t// project the point onto the plane of the triangle\n\n\t\t\tplane.setFromCoplanarPoints( this.a, this.b, this.c );\n\t\t\tplane.projectPoint( point, projectedPoint );\n\n\t\t\t// check if the projection lies within the triangle\n\n\t\t\tif ( this.containsPoint( projectedPoint ) === true ) {\n\n\t\t\t\t// if so, this is the closest point\n\n\t\t\t\ttarget.copy( projectedPoint );\n\n\t\t\t} else {\n\n\t\t\t\t// if not, the point falls outside the triangle. the target is the closest point to the triangle's edges or vertices\n\n\t\t\t\tedgeList[ 0 ].set( this.a, this.b );\n\t\t\t\tedgeList[ 1 ].set( this.b, this.c );\n\t\t\t\tedgeList[ 2 ].set( this.c, this.a );\n\n\t\t\t\tfor ( var i = 0; i < edgeList.length; i ++ ) {\n\n\t\t\t\t\tedgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint );\n\n\t\t\t\t\tvar distance = projectedPoint.distanceToSquared( closestPoint );\n\n\t\t\t\t\tif ( distance < minDistance ) {\n\n\t\t\t\t\t\tminDistance = distance;\n\n\t\t\t\t\t\ttarget.copy( closestPoint );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author jonobr1 / http://jonobr1.com/\n */\n\nfunction Mesh( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Mesh';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } );\n\n\tthis.drawMode = TrianglesDrawMode;\n\n\tthis.updateMorphTargets();\n\n}\n\nMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Mesh,\n\n\tisMesh: true,\n\n\tsetDrawMode: function ( value ) {\n\n\t\tthis.drawMode = value;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.drawMode = source.drawMode;\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tvar geometry = this.geometry;\n\t\tvar m, ml, name;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\tvar keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tvar morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tname = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( m = 0, ml = morphTargets.length; m < ml; m ++ ) {\n\n\t\t\t\t\tname = morphTargets[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\tvar vA = new Vector3();\n\t\tvar vB = new Vector3();\n\t\tvar vC = new Vector3();\n\n\t\tvar tempA = new Vector3();\n\t\tvar tempB = new Vector3();\n\t\tvar tempC = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tvar barycoord = new Vector3();\n\n\t\tvar intersectionPoint = new Vector3();\n\t\tvar intersectionPointWorld = new Vector3();\n\n\t\tfunction uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) {\n\n\t\t\tTriangle.getBarycoord( point, p1, p2, p3, barycoord );\n\n\t\t\tuv1.multiplyScalar( barycoord.x );\n\t\t\tuv2.multiplyScalar( barycoord.y );\n\t\t\tuv3.multiplyScalar( barycoord.z );\n\n\t\t\tuv1.add( uv2 ).add( uv3 );\n\n\t\t\treturn uv1.clone();\n\n\t\t}\n\n\t\tfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\t\t\tvar intersect;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t\t\t} else {\n\n\t\t\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t\t\t}\n\n\t\t\tif ( intersect === null ) return null;\n\n\t\t\tintersectionPointWorld.copy( point );\n\t\t\tintersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPointWorld );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\t\t\treturn {\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectionPointWorld.clone(),\n\t\t\t\tobject: object\n\t\t\t};\n\n\t\t}\n\n\t\tfunction checkBufferGeometryIntersection( object, raycaster, ray, position, uv, a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( position, a );\n\t\t\tvB.fromBufferAttribute( position, b );\n\t\t\tvC.fromBufferAttribute( position, c );\n\n\t\t\tvar intersection = checkIntersection( object, object.material, raycaster, ray, vA, vB, vC, intersectionPoint );\n\n\t\t\tif ( intersection ) {\n\n\t\t\t\tif ( uv ) {\n\n\t\t\t\t\tuvA.fromBufferAttribute( uv, a );\n\t\t\t\t\tuvB.fromBufferAttribute( uv, b );\n\t\t\t\t\tuvC.fromBufferAttribute( uv, c );\n\n\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC );\n\n\t\t\t\t}\n\n\t\t\t\tvar face = new Face3( a, b, c );\n\t\t\t\tTriangle.getNormal( vA, vB, vC, face.normal );\n\n\t\t\t\tintersection.face = face;\n\t\t\t\tintersection.faceIndex = a;\n\n\t\t\t}\n\n\t\t\treturn intersection;\n\n\t\t}\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar material = this.material;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\tif ( material === undefined ) return;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t// Check boundingBox before continuing\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tif ( ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t\t}\n\n\t\t\tvar intersection;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar a, b, c;\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar position = geometry.attributes.position;\n\t\t\t\tvar uv = geometry.attributes.uv;\n\t\t\t\tvar i, l;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t// indexed buffer geometry\n\n\t\t\t\t\tfor ( i = 0, l = index.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\ta = index.getX( i );\n\t\t\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indices buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\t\tfor ( i = 0, l = position.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\ta = i;\n\t\t\t\t\t\tb = i + 1;\n\t\t\t\t\t\tc = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.index = a; // triangle number in positions buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar fvA, fvB, fvC;\n\t\t\t\tvar isMultiMaterial = Array.isArray( material );\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar uvs;\n\n\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tvar face = faces[ f ];\n\t\t\t\t\tvar faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\t\tfvA = vertices[ face.a ];\n\t\t\t\t\tfvB = vertices[ face.b ];\n\t\t\t\t\tfvC = vertices[ face.c ];\n\n\t\t\t\t\tif ( faceMaterial.morphTargets === true ) {\n\n\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\t\t\t\tvar morphInfluences = this.morphTargetInfluences;\n\n\t\t\t\t\t\tvA.set( 0, 0, 0 );\n\t\t\t\t\t\tvB.set( 0, 0, 0 );\n\t\t\t\t\t\tvC.set( 0, 0, 0 );\n\n\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\tvar targets = morphTargets[ t ].vertices;\n\n\t\t\t\t\t\t\tvA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence );\n\t\t\t\t\t\t\tvB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence );\n\t\t\t\t\t\t\tvC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvA.add( fvA );\n\t\t\t\t\t\tvB.add( fvB );\n\t\t\t\t\t\tvC.add( fvC );\n\n\t\t\t\t\t\tfvA = vA;\n\t\t\t\t\t\tfvB = vB;\n\t\t\t\t\t\tfvC = vC;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\t\tvar uvs_f = uvs[ f ];\n\t\t\t\t\t\t\tuvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t\tuvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t\tuvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tintersection.face = face;\n\t\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBackground( renderer, state, geometries, premultipliedAlpha ) {\n\n\tvar clearColor = new Color( 0x000000 );\n\tvar clearAlpha = 0;\n\n\tvar planeCamera, planeMesh;\n\tvar boxMesh;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tvar background = scene.background;\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && background.isCubeTexture ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tuniforms: ShaderLib.cube.uniforms,\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: true,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.removeAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.removeAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\tgeometries.update( boxMesh.geometry );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.tCube.value = background;\n\n\t\t\trenderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeCamera === undefined ) {\n\n\t\t\t\tplaneCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } )\n\t\t\t\t);\n\n\t\t\t\tgeometries.update( planeMesh.geometry );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.map = background;\n\n\t\t\t// TODO Push this to renderList\n\n\t\t\trenderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha !== undefined ? alpha : 1;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar position = geometry.attributes.position;\n\n\t\tif ( position.isInterleavedBufferAttribute ) {\n\n\t\t\tcount = position.data.count;\n\n\t\t\textension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount );\n\n\t\t} else {\n\n\t\t\textension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount );\n\n\t\t}\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tvar maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tvar precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tvar maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tvar logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tvar maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tvar maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tvar maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tvar maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tvar maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tvar maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tvar vertexTextures = maxVertexTextures > 0;\n\tvar floatFragmentTextures = !! extensions.get( 'OES_texture_float' );\n\tvar floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\treturn {\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures\n\n\t};\n\n}\n\n/**\n * @author tschw\n */\n\nfunction WebGLClipping() {\n\n\tvar scope = this,\n\n\t\tglobalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false,\n\n\t\tplane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tvar enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( planes, clipIntersection, clipShadows, camera, cache, fromCache ) {\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4,\n\n\t\t\t\tdstArray = cache.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, fromCache );\n\n\t\t\tfor ( var i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tcache.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tvar nPlanes = planes !== null ? planes.length : 0,\n\t\t\tdstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tvar flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLExtensions( gl ) {\n\n\tvar extensions = {};\n\n\treturn {\n\n\t\tget: function ( name ) {\n\n\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\treturn extensions[ name ];\n\n\t\t\t}\n\n\t\t\tvar extension;\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_etc1':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_etc1' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t}\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\textensions[ name ] = extension;\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLGeometries( gl, attributes, info ) {\n\n\tvar geometries = {};\n\tvar wireframeAttributes = {};\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tvar geometry = event.target;\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t}\n\n\t\tfor ( var name in buffergeometry.attributes ) {\n\n\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\t// TODO Remove duplicate code\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ geometry.id ];\n\n\t\t}\n\n\t\tattribute = wireframeAttributes[ buffergeometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ buffergeometry.id ];\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tbuffergeometry = geometry;\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t}\n\n\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t}\n\n\t\tgeometries[ geometry.id ] = buffergeometry;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tvar index = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tfor ( var name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( var name in morphAttributes ) {\n\n\t\t\tvar array = morphAttributes[ name ];\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) return attribute;\n\n\t\tvar indices = [];\n\n\t\tvar geometryIndex = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t// console.time( 'wireframe' );\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tvar array = geometryIndex.array;\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tvar a = array[ i + 0 ];\n\t\t\t\tvar b = array[ i + 1 ];\n\t\t\t\tvar c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar array = geometryAttributes.position.array;\n\n\t\t\tfor ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tvar a = i + 0;\n\t\t\t\tvar b = i + 1;\n\t\t\t\tvar c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// console.timeEnd( 'wireframe' );\n\n\t\tattribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\n\t\tattributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\twireframeAttributes[ geometry.id ] = attribute;\n\n\t\treturn attribute;\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tvar type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\textension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLInfo( gl ) {\n\n\tvar memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tvar render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\tinstanceCount = instanceCount || 1;\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.TRIANGLE_STRIP:\n\t\t\tcase gl.TRIANGLE_FAN:\n\t\t\t\trender.triangles += instanceCount * ( count - 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tvar influencesList = {};\n\tvar morphInfluences = new Float32Array( 8 );\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tvar objectInfluences = object.morphTargetInfluences;\n\n\t\tvar length = objectInfluences.length;\n\n\t\tvar influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\tvar morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tvar morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\t// Remove current morphAttributes\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence[ 1 ] !== 0 ) {\n\n\t\t\t\tif ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );\n\t\t\t\tif ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\t// Add morphAttributes\n\n\t\tfor ( var i = 0; i < 8; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence ) {\n\n\t\t\t\tvar index = influence[ 0 ];\n\t\t\t\tvar value = influence[ 1 ];\n\n\t\t\t\tif ( value ) {\n\n\t\t\t\t\tif ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\t\t\t\t\tif ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLObjects( geometries, info ) {\n\n\tvar updateList = {};\n\n\tfunction update( object ) {\n\n\t\tvar frame = info.render.frame;\n\n\t\tvar geometry = object.geometry;\n\t\tvar buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateList[ buffergeometry.id ] !== frame ) {\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t}\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateList[ buffergeometry.id ] = frame;\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\timages = images !== undefined ? images : [];\n\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.flipY = false;\n\n}\n\nCubeTexture.prototype = Object.create( Texture.prototype );\nCubeTexture.prototype.constructor = CubeTexture;\n\nCubeTexture.prototype.isCubeTexture = true;\n\nObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\tget: function () {\n\n\t\treturn this.image;\n\n\t},\n\n\tset: function ( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n *\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program, renderer )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [renderer] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'renderer' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (renderer factorizations):\n *\n * .upload( gl, seq, values, renderer )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (renderer factorizations):\n *\n * .setValue( gl, name, value )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .set( gl, obj, prop )\n *\n * \t\tsets uniform from object and property with same name than uniform\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nvar emptyTexture = new Texture();\nvar emptyCubeTexture = new CubeTexture();\n\n// --- Base for inner nodes (including the root) ---\n\nfunction UniformContainer() {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nvar arrayCacheF32 = [];\nvar arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nvar mat4array = new Float32Array( 16 );\nvar mat3array = new Float32Array( 9 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tvar firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tvar n = nBlocks * blockSize,\n\t\tr = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( renderer, n ) {\n\n\tvar r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( var i = 0; i !== n; ++ i )\n\t\tr[ i ] = renderer.allocTextureUnit();\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValue1f( gl, v ) {\n\n\tgl.uniform1f( this.addr, v );\n\n}\n\nfunction setValue1i( gl, v ) {\n\n\tgl.uniform1i( this.addr, v );\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValue2fv( gl, v ) {\n\n\tif ( v.x === undefined ) {\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t} else {\n\n\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t}\n\n}\n\nfunction setValue3fv( gl, v ) {\n\n\tif ( v.x !== undefined ) {\n\n\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t} else {\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t}\n\n}\n\nfunction setValue4fv( gl, v ) {\n\n\tif ( v.x === undefined ) {\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t} else {\n\n\t\t gl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t}\n\n}\n\n// Single matrix (from flat array or MatrixN)\n\nfunction setValue2fm( gl, v ) {\n\n\tgl.uniformMatrix2fv( this.addr, false, v.elements || v );\n\n}\n\nfunction setValue3fm( gl, v ) {\n\n\tif ( v.elements === undefined ) {\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t} else {\n\n\t\tmat3array.set( v.elements );\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t}\n\n}\n\nfunction setValue4fm( gl, v ) {\n\n\tif ( v.elements === undefined ) {\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t} else {\n\n\t\tmat4array.set( v.elements );\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t}\n\n}\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, renderer ) {\n\n\tvar unit = renderer.allocTextureUnit();\n\tgl.uniform1i( this.addr, unit );\n\trenderer.setTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, renderer ) {\n\n\tvar unit = renderer.allocTextureUnit();\n\tgl.uniform1i( this.addr, unit );\n\trenderer.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\nfunction setValue2iv( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValue3iv( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValue4iv( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1f; // FLOAT\n\t\tcase 0x8b50: return setValue2fv; // _VEC2\n\t\tcase 0x8b51: return setValue3fv; // _VEC3\n\t\tcase 0x8b52: return setValue4fv; // _VEC4\n\n\t\tcase 0x8b5a: return setValue2fm; // _MAT2\n\t\tcase 0x8b5b: return setValue3fm; // _MAT3\n\t\tcase 0x8b5c: return setValue4fm; // _MAT4\n\n\t\tcase 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES\n\t\tcase 0x8b60: return setValueT6; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// Array of scalars\n\nfunction setValue1fv( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\nfunction setValue1iv( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of vectors (flat or from THREE classes)\n\nfunction setValueV2a( gl, v ) {\n\n\tgl.uniform2fv( this.addr, flatten( v, this.size, 2 ) );\n\n}\n\nfunction setValueV3a( gl, v ) {\n\n\tgl.uniform3fv( this.addr, flatten( v, this.size, 3 ) );\n\n}\n\nfunction setValueV4a( gl, v ) {\n\n\tgl.uniform4fv( this.addr, flatten( v, this.size, 4 ) );\n\n}\n\n// Array of matrices (flat or from THREE clases)\n\nfunction setValueM2a( gl, v ) {\n\n\tgl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) );\n\n}\n\nfunction setValueM3a( gl, v ) {\n\n\tgl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) );\n\n}\n\nfunction setValueM4a( gl, v ) {\n\n\tgl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) );\n\n}\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1a( gl, v, renderer ) {\n\n\tvar n = v.length,\n\t\tunits = allocTexUnits( renderer, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6a( gl, v, renderer ) {\n\n\tvar n = v.length,\n\t\tunits = allocTexUnits( renderer, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1fv; // FLOAT\n\t\tcase 0x8b50: return setValueV2a; // _VEC2\n\t\tcase 0x8b51: return setValueV3a; // _VEC3\n\t\tcase 0x8b52: return setValueV4a; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2a; // _MAT2\n\t\tcase 0x8b5b: return setValueM3a; // _MAT3\n\t\tcase 0x8b5c: return setValueM4a; // _MAT4\n\n\t\tcase 0x8b5e: return setValueT1a; // SAMPLER_2D\n\t\tcase 0x8b60: return setValueT6a; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tUniformContainer.call( this ); // mix-in\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value ) {\n\n\t// Note: Don't need an extra 'renderer' parameter, since samplers\n\t// are not allowed in structured uniforms.\n\n\tvar seq = this.seq;\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ] );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nvar RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tvar path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\tfor ( ; ; ) {\n\n\t\tvar match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex,\n\n\t\t\tid = match[ 1 ],\n\t\t\tidIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tvar map = container.map, next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program, renderer ) {\n\n\tUniformContainer.call( this );\n\n\tthis.renderer = renderer;\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\tfor ( var i = 0; i < n; ++ i ) {\n\n\t\tvar info = gl.getActiveUniform( program, i ),\n\t\t\tpath = info.name,\n\t\t\taddr = gl.getUniformLocation( program, path );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value ) {\n\n\tvar u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, this.renderer );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tvar v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, renderer ) {\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, renderer );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tvar r = [];\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction addLineNumbers( string ) {\n\n\tvar lines = string.split( '\\n' );\n\n\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tvar shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\n\n\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\n\n\t}\n\n\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );\n\n\t}\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\treturn shader;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar programIdCount = 0;\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported encoding: ' + encoding );\n\n\t}\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tvar toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase Uncharted2ToneMapping:\n\t\t\ttoneMappingName = 'Uncharted2';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported toneMapping: ' + toneMapping );\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( extensions, parameters, rendererExtensions ) {\n\n\textensions = extensions || {};\n\n\tvar chunks = [\n\t\t( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tvar chunks = [];\n\n\tfor ( var name in defines ) {\n\n\t\tvar value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tvar attributes = {};\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( var i = 0; i < n; i ++ ) {\n\n\t\tvar info = gl.getActiveAttrib( program, i );\n\t\tvar name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\nfunction parseIncludes( string ) {\n\n\tvar pattern = /^[ \\t]*#include +<([\\w\\d.]+)>/gm;\n\n\tfunction replace( match, include ) {\n\n\t\tvar replace = ShaderChunk[ include ];\n\n\t\tif ( replace === undefined ) {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t\treturn parseIncludes( replace );\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction unrollLoops( string ) {\n\n\tvar pattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\n\tfunction replace( match, start, end, snippet ) {\n\n\t\tvar unroll = '';\n\n\t\tfor ( var i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\t\tunroll += snippet.replace( /\\[ i \\]/g, '[ ' + i + ' ]' );\n\n\t\t}\n\n\t\treturn unroll;\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction WebGLProgram( renderer, extensions, code, material, shader, parameters ) {\n\n\tvar gl = renderer.context;\n\n\tvar defines = material.defines;\n\n\tvar vertexShader = shader.vertexShader;\n\tvar fragmentShader = shader.fragmentShader;\n\n\tvar shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t}\n\n\tvar envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\tvar envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\tvar envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t\tcase EquirectangularReflectionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_EQUIREC';\n\t\t\t\tbreak;\n\n\t\t\tcase SphericalReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_SPHERE';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tvar gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\t// console.log( 'building new program ' );\n\n\t//\n\n\tvar customExtensions = generateExtensions( material.extensions, parameters, extensions );\n\n\tvar customDefines = generateDefines( defines );\n\n\t//\n\n\tvar program = gl.createProgram();\n\n\tvar prefixVertex, prefixFragment;\n\n\tif ( material.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\tparameters.envMap && extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\t( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.outputEncoding ? getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ) : '',\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + material.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = parseIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = parseIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tvar vertexGlsl = prefixVertex + vertexShader;\n\tvar fragmentGlsl = prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tvar glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tvar glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( material.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, material.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tvar programLog = gl.getProgramInfoLog( program ).trim();\n\tvar vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\tvar fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\tvar runnable = true;\n\tvar haveDiagnostics = true;\n\n\t// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );\n\t// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );\n\n\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\trunnable = false;\n\n\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );\n\n\t} else if ( programLog !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\thaveDiagnostics = false;\n\n\t}\n\n\tif ( haveDiagnostics ) {\n\n\t\tthis.diagnostics = {\n\n\t\t\trunnable: runnable,\n\t\t\tmaterial: material,\n\n\t\t\tprogramLog: programLog,\n\n\t\t\tvertexShader: {\n\n\t\t\t\tlog: vertexLog,\n\t\t\t\tprefix: prefixVertex\n\n\t\t\t},\n\n\t\t\tfragmentShader: {\n\n\t\t\t\tlog: fragmentLog,\n\t\t\t\tprefix: prefixFragment\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// clean up\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tvar cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program, renderer );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tvar cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t// DEPRECATED\n\n\tObject.defineProperties( this, {\n\n\t\tuniforms: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' );\n\t\t\t\treturn this.getUniforms();\n\n\t\t\t}\n\t\t},\n\n\t\tattributes: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' );\n\t\t\t\treturn this.getAttributes();\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\n\t//\n\n\tthis.id = programIdCount ++;\n\tthis.code = code;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLPrograms( renderer, extensions, capabilities ) {\n\n\tvar programs = [];\n\n\tvar shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'phong',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow'\n\t};\n\n\tvar parameterNames = [\n\t\t\"precision\", \"supportsVertexTextures\", \"map\", \"mapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\",\n\t\t\"lightMap\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"displacementMap\", \"specularMap\",\n\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"fog\", \"useFog\", \"fogExp\",\n\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\n\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\n\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\n\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\", \"numRectAreaLights\",\n\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\"\n\t];\n\n\n\tfunction allocateBones( object ) {\n\n\t\tvar skeleton = object.skeleton;\n\t\tvar bones = skeleton.bones;\n\n\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t// - leave some extra space for other uniforms\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t// (up to 54 should be safe)\n\n\t\t\tvar nVertexUniforms = capabilities.maxVertexUniforms;\n\t\t\tvar nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tvar maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map, gammaOverrideLinear ) {\n\n\t\tvar encoding;\n\n\t\tif ( ! map ) {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t} else if ( map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t}\n\n\t\t// add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point.\n\t\tif ( encoding === LinearEncoding && gammaOverrideLinear ) {\n\n\t\t\tencoding = GammaEncoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tthis.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) {\n\n\t\tvar shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tvar maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0;\n\t\tvar precision = capabilities.precision;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\n\t\tvar parameters = {\n\n\t\t\tshaderID: shaderID,\n\n\t\t\tprecision: precision,\n\t\t\tsupportsVertexTextures: capabilities.vertexTextures,\n\t\t\toutputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ),\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ),\n\t\t\tenvMap: !! material.envMap,\n\t\t\tenvMapMode: material.envMap && material.envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ),\n\t\t\tenvMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexColors: material.vertexColors,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: capabilities.floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumClippingPlanes: nClipPlanes,\n\t\t\tnumClipIntersection: nClipIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: renderer.toneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false\n\n\t\t};\n\n\t\treturn parameters;\n\n\t};\n\n\tthis.getProgramCode = function ( material, parameters ) {\n\n\t\tvar array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( material.fragmentShader );\n\t\t\tarray.push( material.vertexShader );\n\n\t\t}\n\n\t\tif ( material.defines !== undefined ) {\n\n\t\t\tfor ( var name in material.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( material.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t}\n\n\t\tarray.push( material.onBeforeCompile.toString() );\n\n\t\tarray.push( renderer.gammaOutput );\n\n\t\treturn array.join();\n\n\t};\n\n\tthis.acquireProgram = function ( material, shader, parameters, code ) {\n\n\t\tvar program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( var p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tvar programInfo = programs[ p ];\n\n\t\t\tif ( programInfo.code === code ) {\n\n\t\t\t\tprogram = programInfo;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, extensions, code, material, shader, parameters );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t};\n\n\tthis.releaseProgram = function ( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tvar i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t};\n\n\t// Exposed for resource monitoring & error feedback via renderer.info:\n\tthis.programs = programs;\n\n}\n\n/**\n * @author fordacious / fordacious.github.io\n */\n\nfunction WebGLProperties() {\n\n\tvar properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tvar map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program && b.program && a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction WebGLRenderList() {\n\n\tvar renderItems = [];\n\tvar renderItemsIndex = 0;\n\n\tvar opaque = [];\n\tvar transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction push( object, geometry, material, z, group ) {\n\n\t\tvar renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: material.program,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = material.program;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t\trenderItemsIndex ++;\n\n\t}\n\n\tfunction sort() {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( reversePainterSortStable );\n\n\t}\n\n\treturn {\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tvar lists = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\t\tvar list = lists[ hash ];\n\n\t\tif ( list === undefined ) {\n\n\t\t\t// console.log( 'THREE.WebGLRenderLists:', hash );\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists[ hash ] = list;\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction UniformsCache() {\n\n\tvar lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tvar uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nvar count = 0;\n\nfunction WebGLLights() {\n\n\tvar cache = new UniformsCache();\n\n\tvar state = {\n\n\t\tid: count ++,\n\n\t\thash: '',\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tdirectional: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\tpoint: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tvar vector3 = new Vector3();\n\tvar matrix4 = new Matrix4();\n\tvar matrix42 = new Matrix4();\n\n\tfunction setup( lights, shadows, camera ) {\n\n\t\tvar r = 0, g = 0, b = 0;\n\n\t\tvar directionalLength = 0;\n\t\tvar pointLength = 0;\n\t\tvar spotLength = 0;\n\t\tvar rectAreaLength = 0;\n\t\tvar hemiLength = 0;\n\n\t\tvar viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( var i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\n\t\t\tvar color = light.color;\n\t\t\tvar intensity = light.intensity;\n\t\t\tvar distance = light.distance;\n\n\t\t\tvar shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t// TODO (abelnation): RectAreaLight distance?\n\t\t\t\t// uniforms.distance = distance;\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tuniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tuniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t}\n\n\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tstate.directional.length = directionalLength;\n\t\tstate.spot.length = spotLength;\n\t\tstate.rectArea.length = rectAreaLength;\n\t\tstate.point.length = pointLength;\n\t\tstate.hemi.length = hemiLength;\n\n\t\tstate.hash = state.id + ',' + directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length;\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tstate: state\n\t};\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLRenderState() {\n\n\tvar lights = new WebGLLights();\n\n\tvar lightsArray = [];\n\tvar shadowsArray = [];\n\tvar spritesArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\t\tspritesArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction pushSprite( shadowLight ) {\n\n\t\tspritesArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( camera ) {\n\n\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t}\n\n\tvar state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\t\tspritesArray: spritesArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow,\n\t\tpushSprite: pushSprite\n\t};\n\n}\n\nfunction WebGLRenderStates() {\n\n\tvar renderStates = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\n\t\tvar renderState = renderStates[ hash ];\n\n\t\tif ( renderState === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState();\n\t\t\trenderStates[ hash ] = renderState;\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / https://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n * opacity: <float>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>\n * }\n */\n\nfunction MeshDepthMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDepthMaterial';\n\n\tthis.depthPacking = BasicDepthPacking;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDepthMaterial.prototype = Object.create( Material.prototype );\nMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\nMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.depthPacking = source.depthPacking;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n * referencePosition: <float>,\n * nearDistance: <float>,\n * farDistance: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>\n *\n * }\n */\n\nfunction MeshDistanceMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDistanceMaterial';\n\n\tthis.referencePosition = new Vector3();\n\tthis.nearDistance = 1;\n\tthis.farDistance = 1000;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDistanceMaterial.prototype = Object.create( Material.prototype );\nMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.referencePosition.copy( source.referencePosition );\n\tthis.nearDistance = source.nearDistance;\n\tthis.farDistance = source.farDistance;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tvar _frustum = new Frustum(),\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_shadowMapSize = new Vector2(),\n\t\t_maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ),\n\n\t\t_lookTarget = new Vector3(),\n\t\t_lightPositionWorld = new Vector3(),\n\n\t\t_MorphingFlag = 1,\n\t\t_SkinningFlag = 2,\n\n\t\t_NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1,\n\n\t\t_depthMaterials = new Array( _NumberOfMaterialVariants ),\n\t\t_distanceMaterials = new Array( _NumberOfMaterialVariants ),\n\n\t\t_materialCache = {};\n\n\tvar shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tvar cubeDirections = [\n\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t];\n\n\tvar cubeUps = [\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t];\n\n\tvar cube2DViewPorts = [\n\t\tnew Vector4(), new Vector4(), new Vector4(),\n\t\tnew Vector4(), new Vector4(), new Vector4()\n\t];\n\n\t// init\n\n\tfor ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) {\n\n\t\tvar useMorphing = ( i & _MorphingFlag ) !== 0;\n\t\tvar useSkinning = ( i & _SkinningFlag ) !== 0;\n\n\t\tvar depthMaterial = new MeshDepthMaterial( {\n\n\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_depthMaterials[ i ] = depthMaterial;\n\n\t\t//\n\n\t\tvar distanceMaterial = new MeshDistanceMaterial( {\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_distanceMaterials[ i ] = distanceMaterial;\n\n\t}\n\n\t//\n\n\tvar scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\t// TODO Clean up (needed in case of contextlost)\n\t\tvar _gl = _renderer.context;\n\t\tvar _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.disable( _gl.BLEND );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tvar faceCount;\n\n\t\tfor ( var i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\t\t\tvar shadow = light.shadow;\n\t\t\tvar isPointLight = light && light.isPointLight;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar shadowCamera = shadow.camera;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\t\t\t_shadowMapSize.min( _maxShadowMapSize );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tvar vpWidth = _shadowMapSize.x;\n\t\t\t\tvar vpHeight = _shadowMapSize.y;\n\n\t\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t\t// following orientation:\n\t\t\t\t//\n\t\t\t\t// xzXZ\n\t\t\t\t// y Y\n\t\t\t\t//\n\t\t\t\t// X - Positive x direction\n\t\t\t\t// x - Negative x direction\n\t\t\t\t// Y - Positive y direction\n\t\t\t\t// y - Negative y direction\n\t\t\t\t// Z - Positive z direction\n\t\t\t\t// z - Negative z direction\n\n\t\t\t\t// positive X\n\t\t\t\tcube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative X\n\t\t\t\tcube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Z\n\t\t\t\tcube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative Z\n\t\t\t\tcube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Y\n\t\t\t\tcube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight );\n\t\t\t\t// negative Y\n\t\t\t\tcube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight );\n\n\t\t\t\t_shadowMapSize.x *= 4.0;\n\t\t\t\t_shadowMapSize.y *= 2.0;\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tvar pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadowCamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.isSpotLightShadow ) {\n\n\t\t\t\tshadow.update( light );\n\n\t\t\t}\n\n\t\t\tvar shadowMap = shadow.map;\n\t\t\tvar shadowMatrix = shadow.matrix;\n\n\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\tshadowCamera.position.copy( _lightPositionWorld );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tfaceCount = 6;\n\n\t\t\t\t// for point lights we set the shadow matrix to be a translation-only matrix\n\t\t\t\t// equal to inverse of the light's position\n\n\t\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t} else {\n\n\t\t\t\tfaceCount = 1;\n\n\t\t\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t// compute shadow matrix\n\n\t\t\t\tshadowMatrix.set(\n\t\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t\t);\n\n\t\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadowMap );\n\t\t\t_renderer.clear();\n\n\t\t\t// render shadow map for each cube face (if omni-directional) or\n\t\t\t// run a single pass if not\n\n\t\t\tfor ( var face = 0; face < faceCount; face ++ ) {\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\t_lookTarget.copy( shadowCamera.position );\n\t\t\t\t\t_lookTarget.add( cubeDirections[ face ] );\n\t\t\t\t\tshadowCamera.up.copy( cubeUps[ face ] );\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\tvar vpDimensions = cube2DViewPorts[ face ];\n\t\t\t\t\t_state.viewport( vpDimensions );\n\n\t\t\t\t}\n\n\t\t\t\t// update camera matrices and frustum\n\n\t\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\t\t// set object matrices & frustum culling\n\n\t\t\t\trenderObject( scene, camera, shadowCamera, isPointLight );\n\n\t\t\t}\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t};\n\n\tfunction getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tvar result = null;\n\n\t\tvar materialVariants = _depthMaterials;\n\t\tvar customMaterial = object.customDepthMaterial;\n\n\t\tif ( isPointLight ) {\n\n\t\t\tmaterialVariants = _distanceMaterials;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( ! customMaterial ) {\n\n\t\t\tvar useMorphing = false;\n\n\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\tif ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t\t} else if ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphTargets && geometry.morphTargets.length > 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isSkinnedMesh && material.skinning === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t}\n\n\t\t\tvar useSkinning = object.isSkinnedMesh && material.skinning;\n\n\t\t\tvar variantIndex = 0;\n\n\t\t\tif ( useMorphing ) variantIndex |= _MorphingFlag;\n\t\t\tif ( useSkinning ) variantIndex |= _SkinningFlag;\n\n\t\t\tresult = materialVariants[ variantIndex ];\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tvar keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tvar materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tvar cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tresult.side = ( material.shadowSide != null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( isPointLight && result.isMeshDistanceMaterial ) {\n\n\t\t\tresult.referencePosition.copy( lightPositionWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, isPointLight ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tvar geometry = _objects.update( object );\n\t\t\t\tvar material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\tfor ( var k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tvar group = groups[ k ];\n\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, isPointLight );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.needsUpdate = true;\n\n}\n\nCanvasTexture.prototype = Object.create( Texture.prototype );\nCanvasTexture.prototype.constructor = CanvasTexture;\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) {\n\n\tvar vertexBuffer, elementBuffer;\n\tvar program, attributes, uniforms;\n\n\tvar texture;\n\n\t// decompose matrixWorld\n\n\tvar spritePosition = new Vector3();\n\tvar spriteRotation = new Quaternion();\n\tvar spriteScale = new Vector3();\n\n\tfunction init() {\n\n\t\tvar vertices = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0,\n\t\t\t 0.5, - 0.5, 1, 0,\n\t\t\t 0.5, 0.5, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 1\n\t\t] );\n\n\t\tvar faces = new Uint16Array( [\n\t\t\t0, 1, 2,\n\t\t\t0, 2, 3\n\t\t] );\n\n\t\tvertexBuffer = gl.createBuffer();\n\t\telementBuffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\n\n\t\tprogram = createProgram();\n\n\t\tattributes = {\n\t\t\tposition: gl.getAttribLocation( program, 'position' ),\n\t\t\tuv: gl.getAttribLocation( program, 'uv' )\n\t\t};\n\n\t\tuniforms = {\n\t\t\tuvOffset: gl.getUniformLocation( program, 'uvOffset' ),\n\t\t\tuvScale: gl.getUniformLocation( program, 'uvScale' ),\n\n\t\t\trotation: gl.getUniformLocation( program, 'rotation' ),\n\t\t\tcenter: gl.getUniformLocation( program, 'center' ),\n\t\t\tscale: gl.getUniformLocation( program, 'scale' ),\n\n\t\t\tcolor: gl.getUniformLocation( program, 'color' ),\n\t\t\tmap: gl.getUniformLocation( program, 'map' ),\n\t\t\topacity: gl.getUniformLocation( program, 'opacity' ),\n\n\t\t\tmodelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ),\n\t\t\tprojectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ),\n\n\t\t\tfogType: gl.getUniformLocation( program, 'fogType' ),\n\t\t\tfogDensity: gl.getUniformLocation( program, 'fogDensity' ),\n\t\t\tfogNear: gl.getUniformLocation( program, 'fogNear' ),\n\t\t\tfogFar: gl.getUniformLocation( program, 'fogFar' ),\n\t\t\tfogColor: gl.getUniformLocation( program, 'fogColor' ),\n\t\t\tfogDepth: gl.getUniformLocation( program, 'fogDepth' ),\n\n\t\t\talphaTest: gl.getUniformLocation( program, 'alphaTest' )\n\t\t};\n\n\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\tcanvas.width = 8;\n\t\tcanvas.height = 8;\n\n\t\tvar context = canvas.getContext( '2d' );\n\t\tcontext.fillStyle = 'white';\n\t\tcontext.fillRect( 0, 0, 8, 8 );\n\n\t\ttexture = new CanvasTexture( canvas );\n\n\t}\n\n\tthis.render = function ( sprites, scene, camera ) {\n\n\t\tif ( sprites.length === 0 ) return;\n\n\t\t// setup gl\n\n\t\tif ( program === undefined ) {\n\n\t\t\tinit();\n\n\t\t}\n\n\t\tstate.useProgram( program );\n\n\t\tstate.initAttributes();\n\t\tstate.enableAttribute( attributes.position );\n\t\tstate.enableAttribute( attributes.uv );\n\t\tstate.disableUnusedAttributes();\n\n\t\tstate.disable( gl.CULL_FACE );\n\t\tstate.enable( gl.BLEND );\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );\n\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\n\t\tgl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\n\n\t\tstate.activeTexture( gl.TEXTURE0 );\n\t\tgl.uniform1i( uniforms.map, 0 );\n\n\t\tvar oldFogType = 0;\n\t\tvar sceneFogType = 0;\n\t\tvar fog = scene.fog;\n\n\t\tif ( fog ) {\n\n\t\t\tgl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );\n\n\t\t\tif ( fog.isFog ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogNear, fog.near );\n\t\t\t\tgl.uniform1f( uniforms.fogFar, fog.far );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 1 );\n\t\t\t\toldFogType = 1;\n\t\t\t\tsceneFogType = 1;\n\n\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogDensity, fog.density );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 2 );\n\t\t\t\toldFogType = 2;\n\t\t\t\tsceneFogType = 2;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tgl.uniform1i( uniforms.fogType, 0 );\n\t\t\toldFogType = 0;\n\t\t\tsceneFogType = 0;\n\n\t\t}\n\n\n\t\t// update positions and sort\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\n\t\t\tsprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld );\n\t\t\tsprite.z = - sprite.modelViewMatrix.elements[ 14 ];\n\n\t\t}\n\n\t\tsprites.sort( painterSortStable );\n\n\t\t// render all sprites\n\n\t\tvar scale = [];\n\t\tvar center = [];\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\t\t\tvar material = sprite.material;\n\n\t\t\tif ( material.visible === false ) continue;\n\n\t\t\tsprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t\tgl.uniform1f( uniforms.alphaTest, material.alphaTest );\n\t\t\tgl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements );\n\n\t\t\tsprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale );\n\n\t\t\tscale[ 0 ] = spriteScale.x;\n\t\t\tscale[ 1 ] = spriteScale.y;\n\n\t\t\tcenter[ 0 ] = sprite.center.x - 0.5;\n\t\t\tcenter[ 1 ] = sprite.center.y - 0.5;\n\n\t\t\tvar fogType = 0;\n\n\t\t\tif ( scene.fog && material.fog ) {\n\n\t\t\t\tfogType = sceneFogType;\n\n\t\t\t}\n\n\t\t\tif ( oldFogType !== fogType ) {\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, fogType );\n\t\t\t\toldFogType = fogType;\n\n\t\t\t}\n\n\t\t\tif ( material.map !== null ) {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y );\n\n\t\t\t} else {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, 0, 0 );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, 1, 1 );\n\n\t\t\t}\n\n\t\t\tgl.uniform1f( uniforms.opacity, material.opacity );\n\t\t\tgl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b );\n\n\t\t\tgl.uniform1f( uniforms.rotation, material.rotation );\n\t\t\tgl.uniform2fv( uniforms.center, center );\n\t\t\tgl.uniform2fv( uniforms.scale, scale );\n\n\t\t\tstate.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\t\t\tstate.buffers.depth.setTest( material.depthTest );\n\t\t\tstate.buffers.depth.setMask( material.depthWrite );\n\t\t\tstate.buffers.color.setMask( material.colorWrite );\n\n\t\t\ttextures.setTexture2D( material.map || texture, 0 );\n\n\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\n\n\t\t\tsprite.onAfterRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t}\n\n\t\t// restore gl\n\n\t\tstate.enable( gl.CULL_FACE );\n\n\t\tstate.reset();\n\n\t};\n\n\tfunction createProgram() {\n\n\t\tvar program = gl.createProgram();\n\n\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\n\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\n\n\t\tgl.shaderSource( vertexShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform float rotation;',\n\t\t\t'uniform vec2 center;',\n\t\t\t'uniform vec2 scale;',\n\t\t\t'uniform vec2 uvOffset;',\n\t\t\t'uniform vec2 uvScale;',\n\n\t\t\t'attribute vec2 position;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvUV = uvOffset + uv * uvScale;',\n\n\t\t\t'\tvec2 alignedPosition = ( position - center ) * scale;',\n\n\t\t\t'\tvec2 rotatedPosition;',\n\t\t\t'\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;',\n\t\t\t'\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;',\n\n\t\t\t'\tvec4 mvPosition;',\n\n\t\t\t'\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\n\t\t\t'\tmvPosition.xy += rotatedPosition;',\n\n\t\t\t'\tgl_Position = projectionMatrix * mvPosition;',\n\n\t\t\t'\tfogDepth = - mvPosition.z;',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.shaderSource( fragmentShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform vec3 color;',\n\t\t\t'uniform sampler2D map;',\n\t\t\t'uniform float opacity;',\n\n\t\t\t'uniform int fogType;',\n\t\t\t'uniform vec3 fogColor;',\n\t\t\t'uniform float fogDensity;',\n\t\t\t'uniform float fogNear;',\n\t\t\t'uniform float fogFar;',\n\t\t\t'uniform float alphaTest;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvec4 texture = texture2D( map, vUV );',\n\n\t\t\t'\tgl_FragColor = vec4( color * texture.xyz, texture.a * opacity );',\n\n\t\t\t'\tif ( gl_FragColor.a < alphaTest ) discard;',\n\n\t\t\t'\tif ( fogType > 0 ) {',\n\n\t\t\t'\t\tfloat fogFactor = 0.0;',\n\n\t\t\t'\t\tif ( fogType == 1 ) {',\n\n\t\t\t'\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );',\n\n\t\t\t'\t\t} else {',\n\n\t\t\t'\t\t\tconst float LOG2 = 1.442695;',\n\t\t\t'\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );',\n\t\t\t'\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );',\n\n\t\t\t'\t\t}',\n\n\t\t\t'\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );',\n\n\t\t\t'\t}',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.compileShader( vertexShader );\n\t\tgl.compileShader( fragmentShader );\n\n\t\tgl.attachShader( program, vertexShader );\n\t\tgl.attachShader( program, fragmentShader );\n\n\t\tgl.linkProgram( program );\n\n\t\treturn program;\n\n\t}\n\n\tfunction painterSortStable( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn b.z - a.z;\n\n\t\t} else {\n\n\t\t\treturn b.id - a.id;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLState( gl, extensions, utils ) {\n\n\tfunction ColorBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar color = new Vector4();\n\t\tvar currentColorMask = null;\n\t\tvar currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentDepthMask = null;\n\t\tvar currentDepthFunc = null;\n\t\tvar currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentStencilMask = null;\n\t\tvar currentStencilFunc = null;\n\t\tvar currentStencilRef = null;\n\t\tvar currentStencilFuncMask = null;\n\t\tvar currentStencilFail = null;\n\t\tvar currentStencilZFail = null;\n\t\tvar currentStencilZPass = null;\n\t\tvar currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef \t!== stencilRef \t||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail\t !== stencilFail \t||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tvar colorBuffer = new ColorBuffer();\n\tvar depthBuffer = new DepthBuffer();\n\tvar stencilBuffer = new StencilBuffer();\n\n\tvar maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar newAttributes = new Uint8Array( maxVertexAttributes );\n\tvar enabledAttributes = new Uint8Array( maxVertexAttributes );\n\tvar attributeDivisors = new Uint8Array( maxVertexAttributes );\n\n\tvar capabilities = {};\n\n\tvar compressedTextureFormats = null;\n\n\tvar currentProgram = null;\n\n\tvar currentBlending = null;\n\tvar currentBlendEquation = null;\n\tvar currentBlendSrc = null;\n\tvar currentBlendDst = null;\n\tvar currentBlendEquationAlpha = null;\n\tvar currentBlendSrcAlpha = null;\n\tvar currentBlendDstAlpha = null;\n\tvar currentPremultipledAlpha = false;\n\n\tvar currentFlipSided = null;\n\tvar currentCullFace = null;\n\n\tvar currentLineWidth = null;\n\n\tvar currentPolygonOffsetFactor = null;\n\tvar currentPolygonOffsetUnits = null;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tvar lineWidthAvailable = false;\n\tvar version = 0;\n\tvar glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t version = parseFloat( /^WebGL\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t lineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t version = parseFloat( /^OpenGL\\ ES\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t lineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tvar currentTextureSlot = null;\n\tvar currentBoundTextures = {};\n\n\tvar currentScissor = new Vector4();\n\tvar currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tvar data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tvar texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tvar emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tenable( gl.BLEND );\n\tsetBlending( NormalBlending );\n\n\t//\n\n\tfunction initAttributes() {\n\n\t\tfor ( var i = 0, l = newAttributes.length; i < l; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== 0 ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension.vertexAttribDivisorANGLE( attribute, 0 );\n\t\t\tattributeDivisors[ attribute ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension.vertexAttribDivisorANGLE( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tfor ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction enable( id ) {\n\n\t\tif ( capabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tcapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( capabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tcapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction getCompressedTextureFormats() {\n\n\t\tif ( compressedTextureFormats === null ) {\n\n\t\t\tcompressedTextureFormats = [];\n\n\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_s3tc' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_etc1' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_astc' ) ) {\n\n\t\t\t\tvar formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS );\n\n\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ) {\n\n\t\t\t\t\tcompressedTextureFormats.push( formats[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn compressedTextureFormats;\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending !== NoBlending ) {\n\n\t\t\tenable( gl.BLEND );\n\n\t\t} else {\n\n\t\t\tdisable( gl.BLEND );\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\tcase AdditiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase SubtractiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MultiplyBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcurrentBlendEquation = null;\n\t\t\tcurrentBlendSrc = null;\n\t\t\tcurrentBlendDst = null;\n\t\t\tcurrentBlendEquationAlpha = null;\n\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t} else {\n\n\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\t\tgl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) );\n\n\t\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t\t}\n\n\t\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\t\tgl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) );\n\n\t\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\t\tcurrentBlendDst = blendDst;\n\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tvar flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\tmaterial.transparent === true\n\t\t\t? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha )\n\t\t\t: setBlending( NoBlending );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tvar boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\tfor ( var i = 0; i < enabledAttributes.length; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] === 1 ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcapabilities = {};\n\n\t\tcompressedTextureFormats = null;\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlending = null;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tenableAttributeAndDivisor: enableAttributeAndDivisor,\n\t\tdisableUnusedAttributes: disableUnusedAttributes,\n\t\tenable: enable,\n\t\tdisable: disable,\n\t\tgetCompressedTextureFormats: getCompressedTextureFormats,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tvar _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); /* global WebGL2RenderingContext */\n\tvar _videoTextures = {};\n\tvar _canvas;\n\n\t//\n\n\tfunction clampToMaxSize( image, maxSize ) {\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tif ( 'data' in image ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// Warning: Scaling through the canvas will only work with images that use\n\t\t\t// premultiplied alpha.\n\n\t\t\tvar scale = maxSize / Math.max( image.width, image.height );\n\n\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\tcanvas.width = Math.floor( image.width * scale );\n\t\t\tcanvas.height = Math.floor( image.height * scale );\n\n\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height );\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image );\n\n\t\t\treturn canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction makePowerOfTwo( image ) {\n\n\t\tif ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof ImageBitmap ) {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = _Math.floorPowerOfTwo( image.width );\n\t\t\t_canvas.height = _Math.floorPowerOfTwo( image.height );\n\n\t\t\tvar context = _canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, _canvas.width, _canvas.height );\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + _canvas.width + 'x' + _canvas.height, image );\n\n\t\t\treturn _canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) {\n\n\t\treturn texture.generateMipmaps && isPowerOfTwo &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tvar textureProperties = properties.get( texture );\n\t\ttextureProperties.__maxMipLevel = Math.log2( Math.max( width, height ) );\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) {\n\n\t\t\treturn _gl.NEAREST;\n\n\t\t}\n\n\t\treturn _gl.LINEAR;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tvar texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\tdelete _videoTextures[ texture.id ];\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tvar renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image && textureProperties.__image__webglTextureCube ) {\n\n\t\t\t// cube texture\n\n\t\t\t_gl.deleteTexture( textureProperties.__image__webglTextureCube );\n\n\t\t} else {\n\n\t\t\t// 2D texture\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\t// remove all webgl properties\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tvar image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image.length === 6 ) {\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tif ( ! textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\ttextureProperties.__image__webglTextureCube = _gl.createTexture();\n\n\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\n\t\t\t\tvar isCompressed = ( texture && texture.isCompressedTexture );\n\t\t\t\tvar isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\t\tvar cubeImage = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar image = cubeImage[ 0 ],\n\t\t\t\t\tisPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage );\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, texture, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t\t} else {\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction setTextureCubeDynamic( texture, slot ) {\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture );\n\n\t}\n\n\tfunction setTextureParameters( textureType, texture, isPowerOfTwoImage ) {\n\n\t\tvar extension;\n\n\t\tif ( isPowerOfTwoImage ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) );\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture );\n\n\t\t\t}\n\n\t\t}\n\n\t\textension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension ) {\n\n\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\tif ( texture.type === HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return;\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\n\t\tvar image = clampToMaxSize( texture.image, capabilities.maxTextureSize );\n\n\t\tif ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) {\n\n\t\t\timage = makePowerOfTwo( image );\n\n\t\t}\n\n\t\tvar isPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type );\n\n\t\tsetTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage );\n\n\t\tvar mipmap, mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tvar internalFormat = _gl.DEPTH_COMPONENT;\n\n\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\tif ( ! _isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( _isWebGL2 ) {\n\n\t\t\t\t// WebGL 2.0 requires signed internalformat for glTexImage2D\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\tif ( texture.format === DepthStencilFormat ) {\n\n\t\t\t\tinternalFormat = _gl.DEPTH_STENCIL;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\tgenerateMipmap( _gl.TEXTURE_2D, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\tvar glFormat = utils.convert( renderTarget.texture.format );\n\t\tvar glType = utils.convert( renderTarget.texture.type );\n\t\tstate.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// FIXME: We don't support !depth !stencil\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tvar isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tvar webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\tinfo.memory.textures ++;\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tvar texture = renderTarget.texture;\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) {\n\n\t\t\tvar target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\tvar webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\tstate.bindTexture( target, null );\n\n\t\t}\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tvar id = texture.id;\n\t\tvar frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures[ id ] !== frame ) {\n\n\t\t\t_videoTextures[ id ] = frame;\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setTextureCubeDynamic = setTextureCubeDynamic;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\n}\n\n/**\n * @author thespite / http://www.twitter.com/thespite\n */\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p ) {\n\n\t\tvar extension;\n\n\t\tif ( p === RepeatWrapping ) return gl.REPEAT;\n\t\tif ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE;\n\t\tif ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT;\n\n\t\tif ( p === NearestFilter ) return gl.NEAREST;\n\t\tif ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST;\n\t\tif ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR;\n\n\t\tif ( p === LinearFilter ) return gl.LINEAR;\n\t\tif ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST;\n\t\tif ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR;\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) return extension.HALF_FLOAT_OES;\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\tif ( p === AddEquation ) return gl.FUNC_ADD;\n\t\tif ( p === SubtractEquation ) return gl.FUNC_SUBTRACT;\n\t\tif ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT;\n\n\t\tif ( p === ZeroFactor ) return gl.ZERO;\n\t\tif ( p === OneFactor ) return gl.ONE;\n\t\tif ( p === SrcColorFactor ) return gl.SRC_COLOR;\n\t\tif ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR;\n\t\tif ( p === SrcAlphaFactor ) return gl.SRC_ALPHA;\n\t\tif ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA;\n\t\tif ( p === DstAlphaFactor ) return gl.DST_ALPHA;\n\t\tif ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA;\n\n\t\tif ( p === DstColorFactor ) return gl.DST_COLOR;\n\t\tif ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR;\n\t\tif ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn p;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === MinEquation || p === MaxEquation ) {\n\n\t\t\textension = extensions.get( 'EXT_blend_minmax' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === MinEquation ) return extension.MIN_EXT;\n\t\t\t\tif ( p === MaxEquation ) return extension.MAX_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author greggman / http://games.greggman.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author tschw\n */\n\nfunction PerspectiveCamera( fov, aspect, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'PerspectiveCamera';\n\n\tthis.fov = fov !== undefined ? fov : 50;\n\tthis.zoom = 1;\n\n\tthis.near = near !== undefined ? near : 0.1;\n\tthis.far = far !== undefined ? far : 2000;\n\tthis.focus = 10;\n\n\tthis.aspect = aspect !== undefined ? aspect : 1;\n\tthis.view = null;\n\n\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\tthis.updateProjectionMatrix();\n\n}\n\nPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: PerspectiveCamera,\n\n\tisPerspectiveCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength: function ( focalLength ) {\n\n\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\tvar vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength: function () {\n\n\t\tvar vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t},\n\n\tgetEffectiveFOV: function () {\n\n\t\treturn _Math.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t},\n\n\tgetFilmWidth: function () {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t},\n\n\tgetFilmHeight: function () {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t},\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * var w = 1920;\n\t * var h = 1080;\n\t * var fullWidth = w * 3;\n\t * var fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar near = this.near,\n\t\t\ttop = near * Math.tan(\n\t\t\t\t_Math.DEG2RAD * 0.5 * this.fov ) / this.zoom,\n\t\t\theight = 2 * top,\n\t\t\twidth = this.aspect * height,\n\t\t\tleft = - 0.5 * width,\n\t\t\tview = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tvar skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ArrayCamera( array ) {\n\n\tPerspectiveCamera.call( this );\n\n\tthis.cameras = array || [];\n\n}\n\nArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\tconstructor: ArrayCamera,\n\n\tisArrayCamera: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebVRManager( renderer ) {\n\n\tvar scope = this;\n\n\tvar device = null;\n\tvar frameData = null;\n\n\tvar poseTarget = null;\n\n\tvar standingMatrix = new Matrix4();\n\tvar standingMatrixInverse = new Matrix4();\n\n\tif ( typeof window !== 'undefined' && 'VRFrameData' in window ) {\n\n\t\tframeData = new window.VRFrameData();\n\n\t}\n\n\tvar matrixWorldInverse = new Matrix4();\n\tvar tempQuaternion = new Quaternion();\n\tvar tempPosition = new Vector3();\n\n\tvar cameraL = new PerspectiveCamera();\n\tcameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 );\n\tcameraL.layers.enable( 1 );\n\n\tvar cameraR = new PerspectiveCamera();\n\tcameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 );\n\tcameraR.layers.enable( 2 );\n\n\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\t//\n\n\tvar currentSize, currentPixelRatio;\n\n\tfunction onVRDisplayPresentChange() {\n\n\t\tif ( device !== null && device.isPresenting ) {\n\n\t\t\tvar eyeParameters = device.getEyeParameters( 'left' );\n\t\t\tvar renderWidth = eyeParameters.renderWidth;\n\t\t\tvar renderHeight = eyeParameters.renderHeight;\n\n\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\tcurrentSize = renderer.getSize();\n\n\t\t\trenderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 );\n\n\t\t} else if ( scope.enabled ) {\n\n\t\t\trenderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio );\n\n\t\t}\n\n\t}\n\n\tif ( typeof window !== 'undefined' ) {\n\n\t\twindow.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false );\n\n\t}\n\n\t//\n\n\tthis.enabled = false;\n\tthis.userHeight = 1.6;\n\n\tthis.getDevice = function () {\n\n\t\treturn device;\n\n\t};\n\n\tthis.setDevice = function ( value ) {\n\n\t\tif ( value !== undefined ) device = value;\n\n\t};\n\n\tthis.setPoseTarget = function ( object ) {\n\n\t\tif ( object !== undefined ) poseTarget = object;\n\n\t};\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tif ( device === null ) return camera;\n\n\t\tdevice.depthNear = camera.near;\n\t\tdevice.depthFar = camera.far;\n\n\t\tdevice.getFrameData( frameData );\n\n\t\t//\n\n\t\tvar stageParameters = device.stageParameters;\n\n\t\tif ( stageParameters ) {\n\n\t\t\tstandingMatrix.fromArray( stageParameters.sittingToStandingTransform );\n\n\t\t} else {\n\n\t\t\tstandingMatrix.makeTranslation( 0, scope.userHeight, 0 );\n\n\t\t}\n\n\n\t\tvar pose = frameData.pose;\n\t\tvar poseObject = poseTarget !== null ? poseTarget : camera;\n\n\t\t// We want to manipulate poseObject by its position and quaternion components since users may rely on them.\n\t\tposeObject.matrix.copy( standingMatrix );\n\t\tposeObject.matrix.decompose( poseObject.position, poseObject.quaternion, poseObject.scale );\n\n\t\tif ( pose.orientation !== null ) {\n\n\t\t\ttempQuaternion.fromArray( pose.orientation );\n\t\t\tposeObject.quaternion.multiply( tempQuaternion );\n\n\t\t}\n\n\t\tif ( pose.position !== null ) {\n\n\t\t\ttempQuaternion.setFromRotationMatrix( standingMatrix );\n\t\t\ttempPosition.fromArray( pose.position );\n\t\t\ttempPosition.applyQuaternion( tempQuaternion );\n\t\t\tposeObject.position.add( tempPosition );\n\n\t\t}\n\n\t\tposeObject.updateMatrixWorld();\n\n\t\tif ( device.isPresenting === false ) return camera;\n\n\t\t//\n\n\t\tcameraL.near = camera.near;\n\t\tcameraR.near = camera.near;\n\n\t\tcameraL.far = camera.far;\n\t\tcameraR.far = camera.far;\n\n\t\tcameraVR.matrixWorld.copy( camera.matrixWorld );\n\t\tcameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse );\n\n\t\tcameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix );\n\t\tcameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix );\n\n\t\t// TODO (mrdoob) Double check this code\n\n\t\tstandingMatrixInverse.getInverse( standingMatrix );\n\n\t\tcameraL.matrixWorldInverse.multiply( standingMatrixInverse );\n\t\tcameraR.matrixWorldInverse.multiply( standingMatrixInverse );\n\n\t\tvar parent = poseObject.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\n\n\t\t\tcameraL.matrixWorldInverse.multiply( matrixWorldInverse );\n\t\t\tcameraR.matrixWorldInverse.multiply( matrixWorldInverse );\n\n\t\t}\n\n\t\t// envMap and Mirror needs camera.matrixWorld\n\n\t\tcameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse );\n\t\tcameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse );\n\n\t\tcameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix );\n\t\tcameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix );\n\n\t\t// HACK (mrdoob)\n\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t//\n\n\t\tvar layers = device.getLayers();\n\n\t\tif ( layers.length ) {\n\n\t\t\tvar layer = layers[ 0 ];\n\n\t\t\tif ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) {\n\n\t\t\t\tcameraL.bounds.fromArray( layer.leftBounds );\n\n\t\t\t}\n\n\t\t\tif ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) {\n\n\t\t\t\tcameraR.bounds.fromArray( layer.rightBounds );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn cameraVR;\n\n\t};\n\n\tthis.getStandingMatrix = function () {\n\n\t\treturn standingMatrix;\n\n\t};\n\n\tthis.submitFrame = function () {\n\n\t\tif ( device && device.isPresenting ) device.submitFrame();\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tif ( typeof window !== 'undefined' ) {\n\n\t\t\twindow.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange );\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n * @author tschw\n */\n\nfunction WebGLRenderer( parameters ) {\n\n\tconsole.log( 'THREE.WebGLRenderer', REVISION );\n\n\tparameters = parameters || {};\n\n\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default';\n\n\tvar currentRenderList = null;\n\tvar currentRenderState = null;\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\tthis.context = null;\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.gammaInput = false;\n\tthis.gammaOutput = false;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = LinearToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\tthis.toneMappingWhitePoint = 1.0;\n\n\t// morphs\n\n\tthis.maxMorphTargets = 8;\n\tthis.maxMorphNormals = 4;\n\n\t// internal properties\n\n\tvar _this = this,\n\n\t\t_isContextLost = false,\n\n\t\t// internal state cache\n\n\t\t_currentRenderTarget = null,\n\t\t_currentFramebuffer = null,\n\t\t_currentMaterialId = - 1,\n\t\t_currentGeometryProgram = '',\n\n\t\t_currentCamera = null,\n\t\t_currentArrayCamera = null,\n\n\t\t_currentViewport = new Vector4(),\n\t\t_currentScissor = new Vector4(),\n\t\t_currentScissorTest = null,\n\n\t\t//\n\n\t\t_usedTextureUnits = 0,\n\n\t\t//\n\n\t\t_width = _canvas.width,\n\t\t_height = _canvas.height,\n\n\t\t_pixelRatio = 1,\n\n\t\t_viewport = new Vector4( 0, 0, _width, _height ),\n\t\t_scissor = new Vector4( 0, 0, _width, _height ),\n\t\t_scissorTest = false,\n\n\t\t// frustum\n\n\t\t_frustum = new Frustum(),\n\n\t\t// clipping\n\n\t\t_clipping = new WebGLClipping(),\n\t\t_clippingEnabled = false,\n\t\t_localClippingEnabled = false,\n\n\t\t// camera matrices cache\n\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_vector3 = new Vector3();\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tvar _gl;\n\n\ttry {\n\n\t\tvar contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t_gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tif ( _canvas.getContext( 'webgl' ) !== null ) {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\n\t}\n\n\tvar extensions, capabilities, state, info;\n\tvar properties, textures, attributes, geometries, objects;\n\tvar programCache, renderLists, renderStates;\n\n\tvar background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\tvar spriteRenderer;\n\n\tvar utils;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\t\textensions.get( 'WEBGL_depth_texture' );\n\t\textensions.get( 'OES_texture_float' );\n\t\textensions.get( 'OES_texture_float_linear' );\n\t\textensions.get( 'OES_texture_half_float' );\n\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\textensions.get( 'OES_standard_derivatives' );\n\t\textensions.get( 'OES_element_index_uint' );\n\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tstate = new WebGLState( _gl, extensions, utils );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tattributes = new WebGLAttributes( _gl );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info );\n\t\tobjects = new WebGLObjects( geometries, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tprogramCache = new WebGLPrograms( _this, extensions, capabilities );\n\t\trenderLists = new WebGLRenderLists();\n\t\trenderStates = new WebGLRenderStates();\n\n\t\tbackground = new WebGLBackground( _this, state, geometries, _premultipliedAlpha );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\tspriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.context = _gl;\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// vr\n\n\tvar vr = new WebVRManager( _this );\n\n\tthis.vr = vr;\n\n\t// shadow map\n\n\tvar shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\tthis.shadowMap = shadowMap;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width,\n\t\t\theight: _height\n\t\t};\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tvar device = vr.getDevice();\n\n\t\tif ( device && device.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = width * _pixelRatio;\n\t\t_canvas.height = height * _pixelRatio;\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width * _pixelRatio,\n\t\t\theight: _height * _pixelRatio\n\t\t};\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = width * pixelRatio;\n\t\t_canvas.height = height * pixelRatio;\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function () {\n\n\t\treturn _currentViewport;\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t_viewport.set( x, _height - y - height, width, height );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t_scissor.set( x, _height - y - height, width, height );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function () {\n\n\t\treturn background.getClearColor();\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tvar bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\n\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\tthis.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tobjects.dispose();\n\n\t\tvr.dispose();\n\n\t\tstopAnimation();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tinitGLContext();\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tvar material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReference( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReference( material ) {\n\n\t\tvar programInfo = properties.get( material ).program;\n\n\t\tmaterial.program = undefined;\n\n\t\tif ( programInfo !== undefined ) {\n\n\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program, material ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program, material );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program, material ) {\n\n\t\tstate.initAttributes();\n\n\t\tvar buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );\n\n\t\t\tif ( ! material.isMeshPhongMaterial &&\n\t\t\t\t! material.isMeshStandardMaterial &&\n\t\t\t\t! material.isMeshNormalMaterial &&\n\t\t\t\tmaterial.flatShading === true ) {\n\n\t\t\t\tfor ( var i = 0, l = object.count * 3; i < l; i += 9 ) {\n\n\t\t\t\t\tvar array = object.normalArray;\n\n\t\t\t\t\tvar nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3;\n\t\t\t\t\tvar ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3;\n\t\t\t\t\tvar nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3;\n\n\t\t\t\t\tarray[ i + 0 ] = nx;\n\t\t\t\t\tarray[ i + 1 ] = ny;\n\t\t\t\t\tarray[ i + 2 ] = nz;\n\n\t\t\t\t\tarray[ i + 3 ] = nx;\n\t\t\t\t\tarray[ i + 4 ] = ny;\n\t\t\t\t\tarray[ i + 5 ] = nz;\n\n\t\t\t\t\tarray[ i + 6 ] = nx;\n\t\t\t\t\tarray[ i + 7 ] = ny;\n\t\t\t\t\tarray[ i + 8 ] = nz;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.normal );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs && material.map ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.uv );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors && material.vertexColors !== NoColors ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.color );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {\n\n\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\tvar program = setProgram( camera, fog, material, object );\n\t\tvar geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true );\n\n\t\tvar updateBuffers = false;\n\n\t\tif ( geometryProgram !== _currentGeometryProgram ) {\n\n\t\t\t_currentGeometryProgram = geometryProgram;\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\t//\n\n\t\tvar index = geometry.index;\n\t\tvar position = geometry.attributes.position;\n\t\tvar rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tvar attribute;\n\t\tvar renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar dataCount = Infinity;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdataCount = index.count;\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\tdataCount = position.count;\n\n\t\t}\n\n\t\tvar rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tvar rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tvar groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tvar groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tvar drawStart = Math.max( rangeStart, groupStart );\n\t\tvar drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tvar drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( object.drawMode ) {\n\n\t\t\t\t\tcase TrianglesDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleStripDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_STRIP );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleFanDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_FAN );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tvar lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t}\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\tif ( geometry.maxInstancedCount > 0 ) {\n\n\t\t\t\trenderer.renderInstances( geometry, drawStart, drawCount );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\tfunction setupVertexAttributes( material, program, geometry, startIndex ) {\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( startIndex === undefined ) startIndex = 0;\n\n\t\tstate.initAttributes();\n\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( var name in programAttributes ) {\n\n\t\t\tvar programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tvar geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tvar normalized = geometryAttribute.normalized;\n\t\t\t\t\tvar size = geometryAttribute.itemSize;\n\n\t\t\t\t\tvar attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tvar buffer = attribute.buffer;\n\t\t\t\t\tvar type = attribute.type;\n\t\t\t\t\tvar bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tvar data = geometryAttribute.data;\n\t\t\t\t\t\tvar stride = data.stride;\n\t\t\t\t\t\tvar offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, ( startIndex * stride + offset ) * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, startIndex * size * bytesPerElement );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tvar value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t}\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.material ) {\n\n\t\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\t\tfor ( var i = 0; i < object.material.length; i ++ ) {\n\n\t\t\t\t\t\tinitMaterial( object.material[ i ], scene.fog, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinitMaterial( object.material, scene.fog, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tvar isAnimating = false;\n\tvar onAnimationFrame = null;\n\n\tfunction startAnimation() {\n\n\t\tif ( isAnimating ) return;\n\n\t\trequestAnimationLoopFrame();\n\n\t\tisAnimating = true;\n\n\t}\n\n\tfunction stopAnimation() {\n\n\t\tisAnimating = false;\n\n\t}\n\n\tfunction requestAnimationLoopFrame() {\n\n\t\tvar device = vr.getDevice();\n\n\t\tif ( device && device.isPresenting ) {\n\n\t\t\tdevice.requestAnimationFrame( animationLoop );\n\n\t\t} else {\n\n\t\t\twindow.requestAnimationFrame( animationLoop );\n\n\t\t}\n\n\t}\n\n\tfunction animationLoop( time ) {\n\n\t\tif ( isAnimating === false ) return;\n\n\t\tonAnimationFrame( time );\n\n\t\trequestAnimationLoopFrame();\n\n\t}\n\n\tthis.animate = function ( callback ) {\n\n\t\tonAnimationFrame = callback;\n\t\tonAnimationFrame !== null ? startAnimation() : stopAnimation();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\n\n\t\tif ( ! ( camera && camera.isCamera ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost ) return;\n\n\t\t// reset caching for this frame\n\n\t\t_currentGeometryProgram = '';\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tcamera = vr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.onBeforeRender( _this, scene, camera, renderTarget );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\tcurrentRenderList.init();\n\n\t\tprojectObject( scene, camera, _this.sortObjects );\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort();\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled ) _clipping.beginShadows();\n\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tif ( _clippingEnabled ) _clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset ) this.info.reset();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\trenderTarget = null;\n\n\t\t}\n\n\t\tthis.setRenderTarget( renderTarget );\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tvar opaqueObjects = currentRenderList.opaque;\n\t\tvar transparentObjects = currentRenderList.transparent;\n\n\t\tif ( scene.overrideMaterial ) {\n\n\t\t\tvar overrideMaterial = scene.overrideMaterial;\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );\n\n\t\t} else {\n\n\t\t\t// opaque pass (front-to-back order)\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );\n\n\t\t\t// transparent pass (back-to-front order)\n\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );\n\n\t\t}\n\n\t\t// custom renderers\n\n\t\tvar spritesArray = currentRenderState.state.spritesArray;\n\n\t\tspriteRenderer.render( spritesArray, scene, camera );\n\n\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\tif ( renderTarget ) {\n\n\t\t\ttextures.updateRenderTargetMipmap( renderTarget );\n\n\t\t}\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\tscene.onAfterRender( _this, scene, camera );\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tvr.submitFrame();\n\n\t\t}\n\n\t\t// _gl.finish();\n\n\t\tcurrentRenderList = null;\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t/*\n\t// TODO Duplicated code (Frustum)\n\n\tvar _sphere = new Sphere();\n\n\tfunction isObjectViewable( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null )\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere ).\n\t\tapplyMatrix4( object.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSpriteViewable( sprite ) {\n\n\t\t_sphere.center.set( 0, 0, 0 );\n\t\t_sphere.radius = 0.7071067811865476;\n\t\t_sphere.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSphereViewable( sphere ) {\n\n\t\tif ( ! _frustum.intersectsSphere( sphere ) ) return false;\n\n\t\tvar numPlanes = _clipping.numPlanes;\n\n\t\tif ( numPlanes === 0 ) return true;\n\n\t\tvar planes = _this.clippingPlanes,\n\n\t\t\tcenter = sphere.center,\n\t\t\tnegRad = - sphere.radius,\n\t\t\ti = 0;\n\n\t\tdo {\n\n\t\t\t// out when deeper than radius in the negative halfspace\n\t\t\tif ( planes[ i ].distanceToPoint( center ) < negRad ) return false;\n\n\t\t} while ( ++ i !== numPlanes );\n\n\t\treturn true;\n\n\t}\n\t*/\n\n\tfunction projectObject( object, camera, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushSprite( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\tobject.skeleton.update();\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar geometry = objects.update( object );\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar group = groups[ i ];\n\t\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera, overrideMaterial ) {\n\n\t\tfor ( var i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tvar renderItem = renderList[ i ];\n\n\t\t\tvar object = renderItem.object;\n\t\t\tvar geometry = renderItem.geometry;\n\t\t\tvar material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;\n\t\t\tvar group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\tvar cameras = camera.cameras;\n\n\t\t\t\tfor ( var j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tvar bounds = camera2.bounds;\n\n\t\t\t\t\t\tvar x = bounds.x * _width;\n\t\t\t\t\t\tvar y = bounds.y * _height;\n\t\t\t\t\t\tvar width = bounds.z * _width;\n\t\t\t\t\t\tvar height = bounds.w * _height;\n\n\t\t\t\t\t\tstate.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) );\n\n\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_currentArrayCamera = null;\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\tvar program = setProgram( camera, scene.fog, material, object );\n\n\t\t\t_currentGeometryProgram = '';\n\n\t\t\trenderObjectImmediate( object, program, material );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t}\n\n\tfunction initMaterial( material, fog, object ) {\n\n\t\tvar materialProperties = properties.get( material );\n\n\t\tvar lights = currentRenderState.state.lights;\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tvar parameters = programCache.getParameters(\n\t\t\tmaterial, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object );\n\n\t\tvar code = programCache.getProgramCode( material, parameters );\n\n\t\tvar program = materialProperties.program;\n\t\tvar programChange = true;\n\n\t\tif ( program === undefined ) {\n\n\t\t\t// new material\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t} else if ( program.code !== code ) {\n\n\t\t\t// changed glsl or parameters\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t} else if ( materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\tproperties.update( material, 'lightsHash', lights.state.hash );\n\t\t\tprogramChange = false;\n\n\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t// same glsl and uniform list\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// only rebuild uniform list\n\t\t\tprogramChange = false;\n\n\t\t}\n\n\t\tif ( programChange ) {\n\n\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\tvar shader = ShaderLib[ parameters.shaderID ];\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\t\tfragmentShader: shader.fragmentShader\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: material.uniforms,\n\t\t\t\t\tvertexShader: material.vertexShader,\n\t\t\t\t\tfragmentShader: material.fragmentShader\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tmaterial.onBeforeCompile( materialProperties.shader, _this );\n\n\t\t\tprogram = programCache.acquireProgram( material, materialProperties.shader, parameters, code );\n\n\t\t\tmaterialProperties.program = program;\n\t\t\tmaterial.program = program;\n\n\t\t}\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( material.morphTargets ) {\n\n\t\t\tmaterial.numSupportedMorphTargets = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphTargets; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphTarget' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphTargets ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.morphNormals ) {\n\n\t\t\tmaterial.numSupportedMorphNormals = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphNormals; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphNormal' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphNormals ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( ! material.isShaderMaterial &&\n\t\t\t! material.isRawShaderMaterial ||\n\t\t\tmaterial.clipping === true ) {\n\n\t\t\tmaterialProperties.numClippingPlanes = _clipping.numPlanes;\n\t\t\tmaterialProperties.numIntersection = _clipping.numIntersection;\n\t\t\tuniforms.clippingPlanes = _clipping.uniform;\n\n\t\t}\n\n\t\tmaterialProperties.fog = fog;\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.lightsHash = lights.state.hash;\n\n\t\tif ( material.lights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tvar progUniforms = materialProperties.program.getUniforms(),\n\t\t\tuniformsList =\n\t\t\t\tWebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t}\n\n\tfunction setProgram( camera, fog, material, object ) {\n\n\t\t_usedTextureUnits = 0;\n\n\t\tvar materialProperties = properties.get( material );\n\t\tvar lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled ) {\n\n\t\t\tif ( _localClippingEnabled || camera !== _currentCamera ) {\n\n\t\t\t\tvar useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\t_clipping.setState(\n\t\t\t\t\tmaterial.clippingPlanes, material.clipIntersection, material.clipShadows,\n\t\t\t\t\tcamera, materialProperties, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate === false ) {\n\n\t\t\tif ( materialProperties.program === undefined ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== _clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== _clipping.numIntersection ) ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate ) {\n\n\t\t\tinitMaterial( material, fog, object );\n\t\t\tmaterial.needsUpdate = false;\n\n\t\t}\n\n\t\tvar refreshProgram = false;\n\t\tvar refreshMaterial = false;\n\t\tvar refreshLights = false;\n\n\t\tvar program = materialProperties.program,\n\t\t\tp_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || camera !== _currentCamera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\t// Avoid unneeded uniform updates per ArrayCamera's sub-camera\n\n\t\t\tif ( _currentCamera !== ( _currentArrayCamera || camera ) ) {\n\n\t\t\t\t_currentCamera = ( _currentArrayCamera || camera );\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tvar uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t// not sure why, but otherwise weird things happen\n\n\t\tif ( material.skinning ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tvar skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tvar bones = skeleton.bones;\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === undefined ) {\n\n\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t\t\t\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\tvar size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = _Math.ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tvar boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\tvar boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\t\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint );\n\n\t\t\tif ( material.lights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\trefreshUniformsFog( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsLambert( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshToonMaterial ) {\n\n\t\t\t\t\trefreshUniformsToon( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsPhong( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\t\trefreshUniformsPhysical( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsStandard( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDepth( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDistance( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsNormal( m_uniforms, material );\n\n\t\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\t\trefreshUniformsLine( m_uniforms, material );\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\trefreshUniformsDash( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\t\trefreshUniformsPoints( m_uniforms, material );\n\n\t\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\t\tm_uniforms.color.value = material.color;\n\t\t\t\tm_uniforms.opacity.value = material.opacity;\n\n\t\t\t}\n\n\t\t\t// RectAreaLight Texture\n\t\t\t// TODO (mrdoob): Find a nicer implementation\n\n\t\t\tif ( m_uniforms.ltc_1 !== undefined ) m_uniforms.ltc_1.value = UniformsLib.LTC_1;\n\t\t\tif ( m_uniforms.ltc_2 !== undefined ) m_uniforms.ltc_2.value = UniformsLib.LTC_2;\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// Uniforms (refresh uniforms objects)\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value = material.color;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\tuniforms.envMap.value = material.envMap;\n\n\t\t\t// don't flip CubeTexture envMaps, flip everything else:\n\t\t\t// WebGLRenderTargetCube will be flipped for backwards compatibility\n\t\t\t// WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture\n\t\t\t// this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future\n\t\t\tuniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tuniforms.maxMipLevel.value = properties.get( material.envMap ).__maxMipLevel;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. normal map\n\t\t// 4. bump map\n\t\t// 5. alpha map\n\t\t// 6. emissive map\n\n\t\tvar uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tvar offset = uvScaleMap.offset;\n\t\t\t\tvar repeat = uvScaleMap.repeat;\n\t\t\t\tvar rotation = uvScaleMap.rotation;\n\t\t\t\tvar center = uvScaleMap.center;\n\n\t\t\t\tuvScaleMap.matrix.setUvTransform( offset.x, offset.y, repeat.x, repeat.y, rotation, center.x, center.y );\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * _pixelRatio;\n\t\tuniforms.scale.value = _height * 0.5;\n\n\t\tuniforms.map.value = material.map;\n\n\t\tif ( material.map !== null ) {\n\n\t\t\tif ( material.map.matrixAutoUpdate === true ) {\n\n\t\t\t\tvar offset = material.map.offset;\n\t\t\t\tvar repeat = material.map.repeat;\n\t\t\t\tvar rotation = material.map.rotation;\n\t\t\t\tvar center = material.map.center;\n\n\t\t\t\tmaterial.map.matrix.setUvTransform( offset.x, offset.y, repeat.x, repeat.y, rotation, center.x, center.y );\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( material.map.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsFog( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value = fog.color;\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value = material.specular;\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\trefreshUniformsPhong( uniforms, material );\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\tuniforms.clearCoat.value = material.clearCoat;\n\t\tuniforms.clearCoatRoughness.value = material.clearCoatRoughness;\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\t// Textures\n\n\tfunction allocTextureUnit() {\n\n\t\tvar textureUnit = _usedTextureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\t_usedTextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tthis.allocTextureUnit = allocTextureUnit;\n\n\t// this.setTexture2D = setTexture2D;\n\tthis.setTexture2D = ( function () {\n\n\t\tvar warned = false;\n\n\t\t// backwards compatibility: peel texture.texture\n\t\treturn function setTexture2D( texture, slot ) {\n\n\t\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTexture = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTexture( texture, slot ) {\n\n\t\t\tif ( ! warned ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\" );\n\t\t\t\twarned = true;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTextureCube = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTextureCube( texture, slot ) {\n\n\t\t\t// backwards compatibility: peel texture.texture\n\t\t\tif ( texture && texture.isWebGLRenderTargetCube ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\t// currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture\n\t\t\t// TODO: unify these code paths\n\t\t\tif ( ( texture && texture.isCubeTexture ) ||\n\t\t\t\t( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\n\n\t\t\t\t// CompressedTexture can have Array in image :/\n\n\t\t\t\t// this function alone should take care of cube textures\n\t\t\t\ttextures.setTextureCube( texture, slot );\n\n\t\t\t} else {\n\n\t\t\t\t// assumed: texture property of THREE.WebGLRenderTargetCube\n\n\t\t\t\ttextures.setTextureCubeDynamic( texture, slot );\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tvar framebuffer = null;\n\t\tvar isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tvar __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( framebuffer ) {\n\n\t\t\tvar restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tvar texture = renderTarget.texture;\n\t\t\t\tvar textureFormat = texture.format;\n\t\t\t\tvar textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level ) {\n\n\t\tvar width = texture.image.width;\n\t\tvar height = texture.image.height;\n\t\tvar glFormat = utils.convert( texture.format );\n\n\t\tthis.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( _gl.TEXTURE_2D, level || 0, glFormat, position.x, position.y, width, height, 0 );\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level ) {\n\n\t\tvar width = srcTexture.image.width;\n\t\tvar height = srcTexture.image.height;\n\t\tvar glFormat = utils.convert( dstTexture.format );\n\t\tvar glType = utils.convert( dstTexture.type );\n\t\tvar pixels = srcTexture.isDataTexture ? srcTexture.image.data : srcTexture.image;\n\n\t\tthis.setTexture2D( dstTexture, 0 );\n\n\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, width, height, glFormat, glType, pixels );\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction FogExp2( color, density ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\nFogExp2.prototype.clone = function () {\n\n\treturn new FogExp2( this.color.getHex(), this.density );\n\n};\n\nFogExp2.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'FogExp2',\n\t\tcolor: this.color.getHex(),\n\t\tdensity: this.density\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Fog( color, near, far ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\n\tthis.near = ( near !== undefined ) ? near : 1;\n\tthis.far = ( far !== undefined ) ? far : 1000;\n\n}\n\nFog.prototype.isFog = true;\n\nFog.prototype.clone = function () {\n\n\treturn new Fog( this.color.getHex(), this.near, this.far );\n\n};\n\nFog.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'Fog',\n\t\tcolor: this.color.getHex(),\n\t\tnear: this.near,\n\t\tfar: this.far\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Scene() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Scene';\n\n\tthis.background = null;\n\tthis.fog = null;\n\tthis.overrideMaterial = null;\n\n\tthis.autoUpdate = true; // checked by the renderer\n\n}\n\nScene.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Scene,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n * map: new THREE.Texture( <Image> ),\n *\n *\tuvOffset: new THREE.Vector2(),\n *\tuvScale: new THREE.Vector2()\n * }\n */\n\nfunction SpriteMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'SpriteMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\tthis.map = null;\n\n\tthis.rotation = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nSpriteMaterial.prototype = Object.create( Material.prototype );\nSpriteMaterial.prototype.constructor = SpriteMaterial;\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nSpriteMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.map = source.map;\n\n\tthis.rotation = source.rotation;\n\n\treturn this;\n\n};\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\n\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\tthis.center = new Vector2( 0.5, 0.5 );\n\n}\n\nSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Sprite,\n\n\tisSprite: true,\n\n\traycast: ( function () {\n\n\t\tvar intersectPoint = new Vector3();\n\t\tvar worldPosition = new Vector3();\n\t\tvar worldScale = new Vector3();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tworldPosition.setFromMatrixPosition( this.matrixWorld );\n\t\t\traycaster.ray.closestPointToPoint( worldPosition, intersectPoint );\n\n\t\t\tworldScale.setFromMatrixScale( this.matrixWorld );\n\t\t\tvar guessSizeSq = worldScale.x * worldScale.y / 4;\n\n\t\t\tif ( worldPosition.distanceToSquared( intersectPoint ) > guessSizeSq ) return;\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\tintersects.push( {\n\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\tface: null,\n\t\t\t\tobject: this\n\n\t\t\t} );\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.material ).copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\treturn this;\n\n\t}\n\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LOD() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'LOD';\n\n\tObject.defineProperties( this, {\n\t\tlevels: {\n\t\t\tenumerable: true,\n\t\t\tvalue: []\n\t\t}\n\t} );\n\n}\n\nLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: LOD,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\tvar levels = source.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\taddLevel: function ( object, distance ) {\n\n\t\tif ( distance === undefined ) distance = 0;\n\n\t\tdistance = Math.abs( distance );\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t},\n\n\tgetObjectForDistance: function ( distance ) {\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn levels[ i - 1 ].object;\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar matrixPosition = new Vector3();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( matrixPosition );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t};\n\n\t}() ),\n\n\tupdate: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tif ( levels.length > 1 ) {\n\n\t\t\t\tv1.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\tv2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tvar distance = v1.distanceTo( v2 );\n\n\t\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.levels = [];\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author michael guerrero / http://realitymeltdown.com\n * @author ikerr / http://verold.com\n */\n\nfunction Skeleton( bones, boneInverses ) {\n\n\t// copy the bone array\n\n\tbones = bones || [];\n\n\tthis.bones = bones.slice( 0 );\n\tthis.boneMatrices = new Float32Array( this.bones.length * 16 );\n\n\t// use the supplied bone inverses or calculate the inverses\n\n\tif ( boneInverses === undefined ) {\n\n\t\tthis.calculateInverses();\n\n\t} else {\n\n\t\tif ( this.bones.length === boneInverses.length ) {\n\n\t\t\tthis.boneInverses = boneInverses.slice( 0 );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Skeleton boneInverses is the wrong length.' );\n\n\t\t\tthis.boneInverses = [];\n\n\t\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Skeleton.prototype, {\n\n\tcalculateInverses: function () {\n\n\t\tthis.boneInverses = [];\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.getInverse( this.bones[ i ].matrixWorld );\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t},\n\n\tpose: function () {\n\n\t\tvar bone, i, il;\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.getInverse( this.boneInverses[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.getInverse( bone.parent.matrixWorld );\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdate: ( function () {\n\n\t\tvar offsetMatrix = new Matrix4();\n\t\tvar identityMatrix = new Matrix4();\n\n\t\treturn function update() {\n\n\t\t\tvar bones = this.bones;\n\t\t\tvar boneInverses = this.boneInverses;\n\t\t\tvar boneMatrices = this.boneMatrices;\n\t\t\tvar boneTexture = this.boneTexture;\n\n\t\t\t// flatten bone matrices to array\n\n\t\t\tfor ( var i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t\t// compute the offset between the current and the original transform\n\n\t\t\t\tvar matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix;\n\n\t\t\t\toffsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t\toffsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t\t}\n\n\t\t\tif ( boneTexture !== undefined ) {\n\n\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t};\n\n\t} )(),\n\n\tclone: function () {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t},\n\n\tgetBoneByName: function ( name ) {\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction Bone() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Bone';\n\n}\n\nBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Bone,\n\n\tisBone: true\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction SkinnedMesh( geometry, material ) {\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'SkinnedMesh';\n\n\tthis.bindMode = 'attached';\n\tthis.bindMatrix = new Matrix4();\n\tthis.bindMatrixInverse = new Matrix4();\n\n\tvar bones = this.initBones();\n\tvar skeleton = new Skeleton( bones );\n\n\tthis.bind( skeleton, this.matrixWorld );\n\n\tthis.normalizeSkinWeights();\n\n}\n\nSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tinitBones: function () {\n\n\t\tvar bones = [], bone, gbone;\n\t\tvar i, il;\n\n\t\tif ( this.geometry && this.geometry.bones !== undefined ) {\n\n\t\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\t// create new 'Bone' object\n\n\t\t\t\tbone = new Bone();\n\t\t\t\tbones.push( bone );\n\n\t\t\t\t// apply values\n\n\t\t\t\tbone.name = gbone.name;\n\t\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t\t}\n\n\t\t\t// second, create bone hierarchy\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\t\tthis.add( bones[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t\t// let's update the corresponding matrices\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn bones;\n\n\t},\n\n\tbind: function ( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.getInverse( bindMatrix );\n\n\t},\n\n\tpose: function () {\n\n\t\tthis.skeleton.pose();\n\n\t},\n\n\tnormalizeSkinWeights: function () {\n\n\t\tvar scale, i;\n\n\t\tif ( this.geometry && this.geometry.isGeometry ) {\n\n\t\t\tfor ( i = 0; i < this.geometry.skinWeights.length; i ++ ) {\n\n\t\t\t\tvar sw = this.geometry.skinWeights[ i ];\n\n\t\t\t\tscale = 1.0 / sw.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tsw.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsw.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.geometry && this.geometry.isBufferGeometry ) {\n\n\t\t\tvar vec = new Vector4();\n\n\t\t\tvar skinWeight = this.geometry.attributes.skinWeight;\n\n\t\t\tfor ( i = 0; i < skinWeight.count; i ++ ) {\n\n\t\t\t\tvec.x = skinWeight.getX( i );\n\t\t\t\tvec.y = skinWeight.getY( i );\n\t\t\t\tvec.z = skinWeight.getZ( i );\n\t\t\t\tvec.w = skinWeight.getW( i );\n\n\t\t\t\tscale = 1.0 / vec.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tvec.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvec.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t\tskinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.matrixWorld );\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.bindMatrix );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n *\n * linewidth: <float>,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nfunction LineBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'LineBasicMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.linewidth = 1;\n\tthis.linecap = 'round';\n\tthis.linejoin = 'round';\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nLineBasicMaterial.prototype = Object.create( Material.prototype );\nLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nLineBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.linewidth = source.linewidth;\n\tthis.linecap = source.linecap;\n\tthis.linejoin = source.linejoin;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Line( geometry, material, mode ) {\n\n\tif ( mode === 1 ) {\n\n\t\tconsole.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' );\n\t\treturn new LineSegments( geometry, material );\n\n\t}\n\n\tObject3D.call( this );\n\n\tthis.type = 'Line';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Line,\n\n\tisLine: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [ 0 ];\n\n\t\t\t\t\tfor ( var i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i ] += start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new THREE.Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\t\tfor ( var i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() ),\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar precision = raycaster.linePrecision;\n\t\t\tvar precisionSq = precision * precision;\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar vStart = new Vector3();\n\t\t\tvar vEnd = new Vector3();\n\t\t\tvar interSegment = new Vector3();\n\t\t\tvar interRay = new Vector3();\n\t\t\tvar step = ( this && this.isLineSegments ) ? 2 : 1;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\t\t\t\t\t\tvar b = indices[ i + 1 ];\n\n\t\t\t\t\t\tvStart.fromArray( positions, a * 3 );\n\t\t\t\t\t\tvEnd.fromArray( positions, b * 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvStart.fromArray( positions, 3 * i );\n\t\t\t\t\t\tvEnd.fromArray( positions, 3 * i + 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar nbVertices = vertices.length;\n\n\t\t\t\tfor ( var i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LineSegments( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineSegments';\n\n}\n\nLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineSegments,\n\n\tisLineSegments: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [];\n\n\t\t\t\t\tfor ( var i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new THREE.Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t\tstart.copy( vertices[ i ] );\n\t\t\t\t\tend.copy( vertices[ i + 1 ] );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() )\n\n} );\n\n/**\n * @author mgreter / http://github.com/mgreter\n */\n\nfunction LineLoop( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineLoop';\n\n}\n\nLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineLoop,\n\n\tisLineLoop: true,\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n * map: new THREE.Texture( <Image> ),\n *\n * size: <float>,\n * sizeAttenuation: <bool>\n * }\n */\n\nfunction PointsMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'PointsMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.size = 1;\n\tthis.sizeAttenuation = true;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nPointsMaterial.prototype = Object.create( Material.prototype );\nPointsMaterial.prototype.constructor = PointsMaterial;\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nPointsMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.size = source.size;\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Points( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Points';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Points,\n\n\tisPoints: true,\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar object = this;\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tvar threshold = raycaster.params.Points.threshold;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\t\t\tsphere.radius += threshold;\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\tvar localThresholdSq = localThreshold * localThreshold;\n\t\t\tvar position = new Vector3();\n\t\t\tvar intersectPoint = new Vector3();\n\n\t\t\tfunction testPoint( point, index ) {\n\n\t\t\t\tvar rayPointDistanceSq = ray.distanceSqToPoint( point );\n\n\t\t\t\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\t\t\t\tray.closestPointToPoint( point, intersectPoint );\n\t\t\t\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tobject: object\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\n\t\t\t\t\t\tposition.fromArray( positions, a * 3 );\n\n\t\t\t\t\t\ttestPoint( position, a );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3; i < l; i ++ ) {\n\n\t\t\t\t\t\tposition.fromArray( positions, i * 3 );\n\n\t\t\t\t\t\ttestPoint( position, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\ttestPoint( vertices[ i ], i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Group() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Group';\n\n}\n\nGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Group,\n\n\tisGroup: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.generateMipmaps = false;\n\n}\n\nVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\tconstructor: VideoTexture,\n\n\tisVideoTexture: true,\n\n\tupdate: function () {\n\n\t\tvar video = this.image;\n\n\t\tif ( video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { width: width, height: height };\n\tthis.mipmaps = mipmaps;\n\n\t// no flipping for cube textures\n\t// (also flipping doesn't work for compressed textures )\n\n\tthis.flipY = false;\n\n\t// can't generate mipmaps for compressed textures\n\t// mips must be embedded in DDS files\n\n\tthis.generateMipmaps = false;\n\n}\n\nCompressedTexture.prototype = Object.create( Texture.prototype );\nCompressedTexture.prototype.constructor = CompressedTexture;\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\n/**\n * @author Matt DesLauriers / @mattdesl\n * @author atix / arthursilber.de\n */\n\nfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\tformat = format !== undefined ? format : DepthFormat;\n\n\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t}\n\n\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.image = { width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.flipY = false;\n\tthis.generateMipmaps\t= false;\n\n}\n\nDepthTexture.prototype = Object.create( Texture.prototype );\nDepthTexture.prototype.constructor = DepthTexture;\nDepthTexture.prototype.isDepthTexture = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WireframeGeometry( geometry ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'WireframeGeometry';\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar i, j, l, o, ol;\n\tvar edge = [ 0, 0 ], edges = {}, e, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\tvar vertex;\n\n\t// different logic for Geometry and BufferGeometry\n\n\tif ( geometry && geometry.isGeometry ) {\n\n\t\t// create a data structure that contains all edges without duplicates\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices\n\n\t\tfor ( key in edges ) {\n\n\t\t\te = edges[ key ];\n\n\t\t\tvertex = geometry.vertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\tvar position, indices, groups;\n\t\tvar group, start, count;\n\t\tvar index1, index2;\n\n\t\tvertex = new Vector3();\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\t// indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\t\t\tindices = geometry.index;\n\t\t\tgroups = geometry.groups;\n\n\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t}\n\n\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\tfor ( o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\tgroup = groups[ o ];\n\n\t\t\t\tstart = group.start;\n\t\t\t\tcount = group.count;\n\n\t\t\t\tfor ( i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tedge1 = indices.getX( i + j );\n\t\t\t\t\t\tedge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( key in edges ) {\n\n\t\t\t\te = edges[ key ];\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// non-indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\n\t\t\tfor ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\tindex1 = 3 * i + j;\n\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tindex2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nWireframeGeometry.prototype = Object.create( BufferGeometry.prototype );\nWireframeGeometry.prototype.constructor = WireframeGeometry;\n\n/**\n * @author zz85 / https://github.com/zz85\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout http://prideout.net/blog/?p=44\n */\n\n// ParametricGeometry\n\nfunction ParametricGeometry( func, slices, stacks ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ParametricGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\tthis.mergeVertices();\n\n}\n\nParametricGeometry.prototype = Object.create( Geometry.prototype );\nParametricGeometry.prototype.constructor = ParametricGeometry;\n\n// ParametricBufferGeometry\n\nfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ParametricBufferGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\tvar EPS = 0.00001;\n\n\tvar normal = new Vector3();\n\n\tvar p0 = new Vector3(), p1 = new Vector3();\n\tvar pu = new Vector3(), pv = new Vector3();\n\n\tvar i, j;\n\n\t// generate vertices, normals and uvs\n\n\tvar sliceCount = slices + 1;\n\n\tfor ( i = 0; i <= stacks; i ++ ) {\n\n\t\tvar v = i / stacks;\n\n\t\tfor ( j = 0; j <= slices; j ++ ) {\n\n\t\t\tvar u = j / slices;\n\n\t\t\t// vertex\n\n\t\t\tfunc( u, v, p0 );\n\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t// normal\n\n\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( j = 0; j < slices; j ++ ) {\n\n\t\t\tvar a = i * sliceCount + j;\n\t\t\tvar b = i * sliceCount + j + 1;\n\t\t\tvar c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tvar d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t// faces one and two\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n/**\n * @author clockworkgeek / https://github.com/clockworkgeek\n * @author timothypratley / https://github.com/timothypratley\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PolyhedronGeometry\n\nfunction PolyhedronGeometry( vertices, indices, radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PolyhedronGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nPolyhedronGeometry.prototype = Object.create( Geometry.prototype );\nPolyhedronGeometry.prototype.constructor = PolyhedronGeometry;\n\n// PolyhedronBufferGeometry\n\nfunction PolyhedronBufferGeometry( vertices, indices, radius, detail ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PolyhedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tradius = radius || 1;\n\tdetail = detail || 0;\n\n\t// default buffer data\n\n\tvar vertexBuffer = [];\n\tvar uvBuffer = [];\n\n\t// the subdivision creates the vertex buffer data\n\n\tsubdivide( detail );\n\n\t// all vertices should lie on a conceptual sphere with a given radius\n\n\tappplyRadius( radius );\n\n\t// finally, create the uv data\n\n\tgenerateUVs();\n\n\t// build non-indexed geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\tif ( detail === 0 ) {\n\n\t\tthis.computeVertexNormals(); // flat normals\n\n\t} else {\n\n\t\tthis.normalizeNormals(); // smooth normals\n\n\t}\n\n\t// helper functions\n\n\tfunction subdivide( detail ) {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t// get the vertices of the face\n\n\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t// perform subdivision\n\n\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t}\n\n\t}\n\n\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\tvar cols = Math.pow( 2, detail );\n\n\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\tvar v = [];\n\n\t\tvar i, j;\n\n\t\t// construct all of the vertices for this subdivision\n\n\t\tfor ( i = 0; i <= cols; i ++ ) {\n\n\t\t\tv[ i ] = [];\n\n\t\t\tvar aj = a.clone().lerp( c, i / cols );\n\t\t\tvar bj = b.clone().lerp( c, i / cols );\n\n\t\t\tvar rows = cols - i;\n\n\t\t\tfor ( j = 0; j <= rows; j ++ ) {\n\n\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// construct all of the faces\n\n\t\tfor ( i = 0; i < cols; i ++ ) {\n\n\t\t\tfor ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\tvar k = Math.floor( j / 2 );\n\n\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction appplyRadius( radius ) {\n\n\t\tvar vertex = new Vector3();\n\n\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tvar vertex = new Vector3();\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvar u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\tvar v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t}\n\n\t\tcorrectUVs();\n\n\t\tcorrectSeam();\n\n\t}\n\n\tfunction correctSeam() {\n\n\t\t// handle case when face straddles the seam, see #3269\n\n\t\tfor ( var i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t// uv data of a single face\n\n\t\t\tvar x0 = uvBuffer[ i + 0 ];\n\t\t\tvar x1 = uvBuffer[ i + 2 ];\n\t\t\tvar x2 = uvBuffer[ i + 4 ];\n\n\t\t\tvar max = Math.max( x0, x1, x2 );\n\t\t\tvar min = Math.min( x0, x1, x2 );\n\n\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction pushVertex( vertex ) {\n\n\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t}\n\n\tfunction getVertexByIndex( index, vertex ) {\n\n\t\tvar stride = index * 3;\n\n\t\tvertex.x = vertices[ stride + 0 ];\n\t\tvertex.y = vertices[ stride + 1 ];\n\t\tvertex.z = vertices[ stride + 2 ];\n\n\t}\n\n\tfunction correctUVs() {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\tvar centroid = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tfor ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\tvar azi = azimuth( centroid );\n\n\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t}\n\n\t}\n\n\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t}\n\n\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t}\n\n\t}\n\n\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\tfunction azimuth( vector ) {\n\n\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t}\n\n\n\t// Angle above the XZ plane.\n\n\tfunction inclination( vector ) {\n\n\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t}\n\n}\n\nPolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TetrahedronGeometry\n\nfunction TetrahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TetrahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nTetrahedronGeometry.prototype = Object.create( Geometry.prototype );\nTetrahedronGeometry.prototype.constructor = TetrahedronGeometry;\n\n// TetrahedronBufferGeometry\n\nfunction TetrahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t];\n\n\tvar indices = [\n\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'TetrahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nTetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nTetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// OctahedronGeometry\n\nfunction OctahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'OctahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nOctahedronGeometry.prototype = Object.create( Geometry.prototype );\nOctahedronGeometry.prototype.constructor = OctahedronGeometry;\n\n// OctahedronBufferGeometry\n\nfunction OctahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t];\n\n\tvar indices = [\n\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t1, 3, 4,\t1, 4, 2\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'OctahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nOctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nOctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// IcosahedronGeometry\n\nfunction IcosahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'IcosahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nIcosahedronGeometry.prototype = Object.create( Geometry.prototype );\nIcosahedronGeometry.prototype.constructor = IcosahedronGeometry;\n\n// IcosahedronBufferGeometry\n\nfunction IcosahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\tvar vertices = [\n\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t 0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t t, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t];\n\n\tvar indices = [\n\t\t 0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t 1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t 3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t 4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'IcosahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nIcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nIcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry;\n\n/**\n * @author Abe Pazos / https://hamoid.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// DodecahedronGeometry\n\nfunction DodecahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'DodecahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nDodecahedronGeometry.prototype = Object.create( Geometry.prototype );\nDodecahedronGeometry.prototype.constructor = DodecahedronGeometry;\n\n// DodecahedronBufferGeometry\n\nfunction DodecahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\tvar r = 1 / t;\n\n\tvar vertices = [\n\n\t\t// (±1, ±1, ±1)\n\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t// (0, ±1/φ, ±φ)\n\t\t 0, - r, - t, 0, - r, t,\n\t\t 0, r, - t, 0, r, t,\n\n\t\t// (±1/φ, ±φ, 0)\n\t\t- r, - t, 0, - r, t, 0,\n\t\t r, - t, 0, r, t, 0,\n\n\t\t// (±φ, 0, ±1/φ)\n\t\t- t, 0, - r, t, 0, - r,\n\t\t- t, 0, r, t, 0, r\n\t];\n\n\tvar indices = [\n\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'DodecahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nDodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nDodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry;\n\n/**\n * @author oosmoxiecode / https://github.com/oosmoxiecode\n * @author WestLangley / https://github.com/WestLangley\n * @author zz85 / https://github.com/zz85\n * @author miningold / https://github.com/miningold\n * @author jonobr1 / https://github.com/jonobr1\n * @author Mugen87 / https://github.com/Mugen87\n *\n */\n\n// TubeGeometry\n\nfunction TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TubeGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\tvar bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = bufferGeometry.tangents;\n\tthis.normals = bufferGeometry.normals;\n\tthis.binormals = bufferGeometry.binormals;\n\n\t// create geometry\n\n\tthis.fromBufferGeometry( bufferGeometry );\n\tthis.mergeVertices();\n\n}\n\nTubeGeometry.prototype = Object.create( Geometry.prototype );\nTubeGeometry.prototype.constructor = TubeGeometry;\n\n// TubeBufferGeometry\n\nfunction TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TubeBufferGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\ttubularSegments = tubularSegments || 64;\n\tradius = radius || 1;\n\tradialSegments = radialSegments || 8;\n\tclosed = closed || false;\n\n\tvar frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = frames.tangents;\n\tthis.normals = frames.normals;\n\tthis.binormals = frames.binormals;\n\n\t// helper variables\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\tvar uv = new Vector2();\n\tvar P = new Vector3();\n\n\tvar i, j;\n\n\t// buffer\n\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\tvar indices = [];\n\n\t// create buffer data\n\n\tgenerateBufferData();\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// functions\n\n\tfunction generateBufferData() {\n\n\t\tfor ( i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\tgenerateSegment( i );\n\n\t\t}\n\n\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t// at the regular position on the given path\n\t\t//\n\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t// uvs are generated in a separate function.\n\t\t// this makes it easy compute correct values for closed geometries\n\n\t\tgenerateUVs();\n\n\t\t// finally create faces\n\n\t\tgenerateIndices();\n\n\t}\n\n\tfunction generateSegment( i ) {\n\n\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t// retrieve corresponding normal and binormal\n\n\t\tvar N = frames.normals[ i ];\n\t\tvar B = frames.binormals[ i ];\n\n\t\t// generate normals and vertices for the current segment\n\n\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\tvar sin = Math.sin( v );\n\t\t\tvar cos = - Math.cos( v );\n\n\t\t\t// normal\n\n\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\tnormal.normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\tfunction generateIndices() {\n\n\t\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nTubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTubeBufferGeometry.prototype.constructor = TubeBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author Mugen87 / https://github.com/Mugen87\n *\n * based on http://www.blackpawn.com/texts/pqtorus/\n */\n\n// TorusKnotGeometry\n\nfunction TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusKnotGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\tthis.mergeVertices();\n\n}\n\nTorusKnotGeometry.prototype = Object.create( Geometry.prototype );\nTorusKnotGeometry.prototype.constructor = TorusKnotGeometry;\n\n// TorusKnotBufferGeometry\n\nfunction TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusKnotBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\ttubularSegments = Math.floor( tubularSegments ) || 64;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\tp = p || 2;\n\tq = q || 3;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, j;\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar P1 = new Vector3();\n\tvar P2 = new Vector3();\n\n\tvar B = new Vector3();\n\tvar T = new Vector3();\n\tvar N = new Vector3();\n\n\t// generate vertices, normals and uvs\n\n\tfor ( i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\tvar u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t// calculate orthonormal basis\n\n\t\tT.subVectors( P2, P1 );\n\t\tN.addVectors( P2, P1 );\n\t\tB.crossVectors( T, N );\n\t\tN.crossVectors( B, T );\n\n\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\tB.normalize();\n\t\tN.normalize();\n\n\t\tfor ( j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\t\t\tvar cx = - tube * Math.cos( v );\n\t\t\tvar cy = tube * Math.sin( v );\n\n\t\t\t// now calculate the final vertex position.\n\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// this function calculates the current position on the torus curve\n\n\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\tvar cu = Math.cos( u );\n\t\tvar su = Math.sin( u );\n\t\tvar quOverP = q / p * u;\n\t\tvar cs = Math.cos( quOverP );\n\n\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t}\n\n}\n\nTorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TorusGeometry\n\nfunction TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\tthis.mergeVertices();\n\n}\n\nTorusGeometry.prototype = Object.create( Geometry.prototype );\nTorusGeometry.prototype.constructor = TorusGeometry;\n\n// TorusBufferGeometry\n\nfunction TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\ttubularSegments = Math.floor( tubularSegments ) || 6;\n\tarc = arc || Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar center = new Vector3();\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tvar u = i / tubularSegments * arc;\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\tvar b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\tvar c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\tvar d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nTorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusBufferGeometry.prototype.constructor = TorusBufferGeometry;\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n * Port from https://github.com/mapbox/earcut (v2.1.2)\n */\n\nvar Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tvar hasHoles = holeIndices && holeIndices.length,\n\t\t\touterLen = hasHoles ? holeIndices[ 0 ] * dim : data.length,\n\t\t\touterNode = linkedList( data, 0, outerLen, dim, true ),\n\t\t\ttriangles = [];\n\n\t\tif ( ! outerNode ) return triangles;\n\n\t\tvar minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( var i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\n\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tvar i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\n\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tvar p = start, again;\n\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\n\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tvar stop = ear, prev, next;\n\n\t// iterate through ears, slicing them one by one\n\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertice leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( ear, triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\n\nfunction isEar( ear ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tvar p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\n\tvar minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\n\tvar minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\t// first look for points inside the triangle in increasing z-order\n\n\tvar p = ear.nextZ;\n\n\twhile ( p && p.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.nextZ;\n\n\t}\n\n\t// then look for points in decreasing z-order\n\n\tp = ear.prevZ;\n\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\n\t\tp = p.prevZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\n\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tvar a = p.prev, b = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn p;\n\n}\n\n// try splitting polygon into two and triangulate them independently\n\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\n\tvar a = start;\n\n\tdo {\n\n\t\tvar b = a.next.next;\n\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\n\t\t\t\tvar c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\n\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tvar queue = [], i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\n\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\n\tif ( outerNode ) {\n\n\t\tvar b = splitPolygon( outerNode, hole );\n\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\n\nfunction findHoleBridge( hole, outerNode ) {\n\n\tvar p = outerNode,\n\t\thx = hole.x,\n\t\thy = hole.y,\n\t\tqx = - Infinity,\n\t\tm;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tvar x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m.prev; // hole touches outer segment; pick lower endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tvar stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y,\n\t\ttanMin = Infinity,\n\t\ttan;\n\n\tp = m.next;\n\n\twhile ( p !== stop ) {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( ( tan < tanMin || ( tan === tanMin && p.x > m.x ) ) && locallyInside( p, hole ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn m;\n\n}\n\n// interlink polygon nodes in z-order\n\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\n\nfunction sortLinked( list ) {\n\n\tvar i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\n\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\n\nfunction getLeftmost( start ) {\n\n\tvar p = start, leftmost = start;\n\n\tdo {\n\n\t\tif ( p.x < leftmost.x ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\n\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\n\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) &&\n\t\tlocallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b );\n\n}\n\n// signed area of a triangle\n\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\n\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\n\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tif ( ( equals( p1, q1 ) && equals( p2, q2 ) ) ||\n\t\t\t( equals( p1, q2 ) && equals( p2, q1 ) ) ) return true;\n\n\treturn area( p1, q1, p2 ) > 0 !== area( p1, q1, q2 ) > 0 &&\n\t\t\t\t area( p2, q2, p1 ) > 0 !== area( p2, q2, q1 ) > 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\n\nfunction intersectsPolygon( a, b ) {\n\n\tvar p = a;\n\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\t\t\tintersects( p, p.next, a, b ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\n\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\n\nfunction middleInside( a, b ) {\n\n\tvar p = a,\n\t\tinside = false,\n\t\tpx = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) {\n\n\t\t\tinside = ! inside;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\n\nfunction splitPolygon( a, b ) {\n\n\tvar a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\n\nfunction insertNode( i, x, y, last ) {\n\n\tvar p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertice index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertice nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tvar sum = 0;\n\n\tfor ( var i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nvar ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tvar n = contour.length;\n\t\tvar a = 0.0;\n\n\t\tfor ( var p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t},\n\n\tisClockWise: function ( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t},\n\n\ttriangulateShape: function ( contour, holes ) {\n\n\t\tvar vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tvar holeIndices = []; // array of hole indices\n\t\tvar faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tvar holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( var i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tvar triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( var i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n};\n\nfunction removeDupEndPts( points ) {\n\n\tvar l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( var i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: <int>, // number of points on the curves\n * steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * amount: <int>, // Depth to extrude the shape\n *\n * bevelEnabled: <bool>, // turn on bevel\n * bevelThickness: <float>, // how deep into the original shape bevel goes\n * bevelSize: <float>, // how far from shape outline is bevel\n * bevelSegments: <int>, // number of bevel layers\n *\n * extrudePath: <THREE.Curve> // curve to extrude shape along\n * frames: <Object> // containing arrays of tangents, normals, binormals\n *\n * UVGenerator: <Object> // object that provides UV generator functions\n *\n * }\n */\n\n// ExtrudeGeometry\n\nfunction ExtrudeGeometry( shapes, options ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ExtrudeGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\toptions: options\n\t};\n\n\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\tthis.mergeVertices();\n\n}\n\nExtrudeGeometry.prototype = Object.create( Geometry.prototype );\nExtrudeGeometry.prototype.constructor = ExtrudeGeometry;\n\n// ExtrudeBufferGeometry\n\nfunction ExtrudeBufferGeometry( shapes, options ) {\n\n\tif ( typeof ( shapes ) === \"undefined\" ) {\n\n\t\treturn;\n\n\t}\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ExtrudeBufferGeometry';\n\n\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\tthis.addShapeList( shapes, options );\n\n\tthis.computeVertexNormals();\n\n\t// can't really use automatic vertex normals\n\t// as then front and back sides get smoothed too\n\t// should do separate smoothing just for sides\n\n\t//this.computeVertexNormals();\n\n\t//console.log( \"took\", ( Date.now() - startTime ) );\n\n}\n\nExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry;\n\nExtrudeBufferGeometry.prototype.getArrays = function () {\n\n\tvar positionAttribute = this.getAttribute( \"position\" );\n\tvar verticesArray = positionAttribute ? Array.prototype.slice.call( positionAttribute.array ) : [];\n\n\tvar uvAttribute = this.getAttribute( \"uv\" );\n\tvar uvArray = uvAttribute ? Array.prototype.slice.call( uvAttribute.array ) : [];\n\n\tvar IndexAttribute = this.index;\n\tvar indicesArray = IndexAttribute ? Array.prototype.slice.call( IndexAttribute.array ) : [];\n\n\treturn {\n\t\tposition: verticesArray,\n\t\tuv: uvArray,\n\t\tindex: indicesArray\n\t};\n\n};\n\nExtrudeBufferGeometry.prototype.addShapeList = function ( shapes, options ) {\n\n\tvar sl = shapes.length;\n\toptions.arrays = this.getArrays();\n\n\tfor ( var s = 0; s < sl; s ++ ) {\n\n\t\tvar shape = shapes[ s ];\n\t\tthis.addShape( shape, options );\n\n\t}\n\n\tthis.setIndex( options.arrays.index );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( options.arrays.position, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( options.arrays.uv, 2 ) );\n\n};\n\nExtrudeBufferGeometry.prototype.addShape = function ( shape, options ) {\n\n\tvar arrays = options.arrays ? options.arrays : this.getArrays();\n\tvar verticesArray = arrays.position;\n\tvar indicesArray = arrays.index;\n\tvar uvArray = arrays.uv;\n\n\tvar placeholder = [];\n\n\n\tvar amount = options.amount !== undefined ? options.amount : 100;\n\n\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; // 10\n\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; // 8\n\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false\n\n\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\n\tvar steps = options.steps !== undefined ? options.steps : 1;\n\n\tvar extrudePath = options.extrudePath;\n\tvar extrudePts, extrudeByPath = false;\n\n\t// Use default WorldUVGenerator if no UV generators are specified.\n\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : ExtrudeGeometry.WorldUVGenerator;\n\n\tvar splineTube, binormal, normal, position2;\n\tif ( extrudePath ) {\n\n\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\textrudeByPath = true;\n\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t// SETUP TNB variables\n\n\t\t// TODO1 - have a .isClosed in spline?\n\n\t\tsplineTube = options.frames !== undefined ? options.frames : extrudePath.computeFrenetFrames( steps, false );\n\n\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\tbinormal = new Vector3();\n\t\tnormal = new Vector3();\n\t\tposition2 = new Vector3();\n\n\t}\n\n\t// Safeguards if bevels are not enabled\n\n\tif ( ! bevelEnabled ) {\n\n\t\tbevelSegments = 0;\n\t\tbevelThickness = 0;\n\t\tbevelSize = 0;\n\n\t}\n\n\t// Variables initialization\n\n\tvar ahole, h, hl; // looping of holes\n\tvar scope = this;\n\n\tvar shapePoints = shape.extractPoints( curveSegments );\n\n\tvar vertices = shapePoints.shape;\n\tvar holes = shapePoints.holes;\n\n\tvar reverse = ! ShapeUtils.isClockWise( vertices );\n\n\tif ( reverse ) {\n\n\t\tvertices = vertices.reverse();\n\n\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\n\tvar faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t/* Vertices */\n\n\tvar contour = vertices; // vertices has all points but contour has only points of circumference\n\n\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\tahole = holes[ h ];\n\n\t\tvertices = vertices.concat( ahole );\n\n\t}\n\n\n\tfunction scalePt2( pt, vec, size ) {\n\n\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\n\n\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t}\n\n\tvar b, bs, t, z,\n\t\tvert, vlen = vertices.length,\n\t\tface, flen = faces.length;\n\n\n\t// Find directions for point movement\n\n\n\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t//\n\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\tvar v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\tvar v_prev_x = inPt.x - inPrev.x,\n\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\tvar v_next_x = inNext.x - inPt.x,\n\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\tvar v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t// check for collinear edges\n\t\tvar collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t// not collinear\n\n\t\t\t// length of vectors for normalizing\n\n\t\t\tvar v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\tvar v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\tvar ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\tvar ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\tvar ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\tvar ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\tvar sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t// vector from inPt to intersection point\n\n\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t// but prevent crazy spikes\n\t\t\tvar v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t} else {\n\n\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// handle special case of collinear edges\n\n\t\t\tvar direction_eq = false; // assumes: opposite\n\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( direction_eq ) {\n\n\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t} else {\n\n\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t}\n\n\n\tvar contourMovements = [];\n\n\tfor ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\tif ( j === il ) j = 0;\n\t\tif ( k === il ) k = 0;\n\n\t\t// (j)---(i)---(k)\n\t\t// console.log('i,j,k', i, j , k)\n\n\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t}\n\n\tvar holesMovements = [],\n\t\toneHoleMovements, verticesMovements = contourMovements.concat();\n\n\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\tahole = holes[ h ];\n\n\t\toneHoleMovements = [];\n\n\t\tfor ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\tif ( j === il ) j = 0;\n\t\t\tif ( k === il ) k = 0;\n\n\t\t\t// (j)---(i)---(k)\n\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t}\n\n\t\tholesMovements.push( oneHoleMovements );\n\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t}\n\n\n\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\tfor ( b = 0; b < bevelSegments; b ++ ) {\n\n\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\tt = b / bevelSegments;\n\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t// contract shape\n\n\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\tv( vert.x, vert.y, - z );\n\n\t\t}\n\n\t\t// expand holes\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tbs = bevelSize;\n\n\t// Back facing vertices\n\n\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\tif ( ! extrudeByPath ) {\n\n\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t} else {\n\n\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t}\n\n\t}\n\n\t// Add stepped vertices...\n\t// Including front facing vertices\n\n\tvar s;\n\n\tfor ( s = 1; s <= steps; s ++ ) {\n\n\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\tv( vert.x, vert.y, amount / steps * s );\n\n\t\t\t} else {\n\n\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\n\t// Add bevel segments planes\n\n\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\tfor ( b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\tt = b / bevelSegments;\n\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t// contract shape\n\n\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\tv( vert.x, vert.y, amount + z );\n\n\t\t}\n\n\t\t// expand holes\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, amount + z );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/* Faces */\n\n\t// Top and bottom faces\n\n\tbuildLidFaces();\n\n\t// Sides faces\n\n\tbuildSideFaces();\n\n\n\t///// Internal functions\n\n\tfunction buildLidFaces() {\n\n\t\tvar start = verticesArray.length / 3;\n\n\t\tif ( bevelEnabled ) {\n\n\t\t\tvar layer = 0; // steps + 1\n\t\t\tvar offset = vlen * layer;\n\n\t\t\t// Bottom faces\n\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\tface = faces[ i ];\n\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t}\n\n\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\toffset = vlen * layer;\n\n\t\t\t// Top faces\n\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\tface = faces[ i ];\n\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Bottom faces\n\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\tface = faces[ i ];\n\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t}\n\n\t\t\t// Top faces\n\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\tface = faces[ i ];\n\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t}\n\n\t\t}\n\n\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t}\n\n\t// Create faces for the z-sides of the shape\n\n\tfunction buildSideFaces() {\n\n\t\tvar start = verticesArray.length / 3;\n\t\tvar layeroffset = 0;\n\t\tsidewalls( contour, layeroffset );\n\t\tlayeroffset += contour.length;\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t//, true\n\t\t\tlayeroffset += ahole.length;\n\n\t\t}\n\n\n\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t}\n\n\tfunction sidewalls( contour, layeroffset ) {\n\n\t\tvar j, k;\n\t\ti = contour.length;\n\n\t\twhile ( -- i >= 0 ) {\n\n\t\t\tj = i;\n\t\t\tk = i - 1;\n\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\tvar s = 0,\n\t\t\t\tsl = steps + bevelSegments * 2;\n\n\t\t\tfor ( s = 0; s < sl; s ++ ) {\n\n\t\t\t\tvar slen1 = vlen * s;\n\t\t\t\tvar slen2 = vlen * ( s + 1 );\n\n\t\t\t\tvar a = layeroffset + j + slen1,\n\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\tf4( a, b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction v( x, y, z ) {\n\n\t\tplaceholder.push( x );\n\t\tplaceholder.push( y );\n\t\tplaceholder.push( z );\n\n\t}\n\n\n\tfunction f3( a, b, c ) {\n\n\t\taddVertex( a );\n\t\taddVertex( b );\n\t\taddVertex( c );\n\n\t\tvar nextIndex = verticesArray.length / 3;\n\t\tvar uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\taddUV( uvs[ 0 ] );\n\t\taddUV( uvs[ 1 ] );\n\t\taddUV( uvs[ 2 ] );\n\n\t}\n\n\tfunction f4( a, b, c, d ) {\n\n\t\taddVertex( a );\n\t\taddVertex( b );\n\t\taddVertex( d );\n\n\t\taddVertex( b );\n\t\taddVertex( c );\n\t\taddVertex( d );\n\n\n\t\tvar nextIndex = verticesArray.length / 3;\n\t\tvar uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\taddUV( uvs[ 0 ] );\n\t\taddUV( uvs[ 1 ] );\n\t\taddUV( uvs[ 3 ] );\n\n\t\taddUV( uvs[ 1 ] );\n\t\taddUV( uvs[ 2 ] );\n\t\taddUV( uvs[ 3 ] );\n\n\t}\n\n\tfunction addVertex( index ) {\n\n\t\tindicesArray.push( verticesArray.length / 3 );\n\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t}\n\n\n\tfunction addUV( vector2 ) {\n\n\t\tuvArray.push( vector2.x );\n\t\tuvArray.push( vector2.y );\n\n\t}\n\n\tif ( ! options.arrays ) {\n\n\t\tthis.setIndex( indicesArray );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t}\n\n};\n\nExtrudeGeometry.WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar a_z = vertices[ indexA * 3 + 2 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar b_z = vertices[ indexB * 3 + 2 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\t\tvar c_z = vertices[ indexC * 3 + 2 ];\n\t\tvar d_x = vertices[ indexD * 3 ];\n\t\tvar d_y = vertices[ indexD * 3 + 1 ];\n\t\tvar d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author alteredq / http://alteredqualia.com/\n *\n * Text = 3D Text\n *\n * parameters = {\n * font: <THREE.Font>, // font\n *\n * size: <float>, // size of the text\n * height: <float>, // thickness to extrude text\n * curveSegments: <int>, // number of points on the curves\n *\n * bevelEnabled: <bool>, // turn on bevel\n * bevelThickness: <float>, // how deep into text bevel goes\n * bevelSize: <float> // how far from text outline is bevel\n * }\n */\n\n// TextGeometry\n\nfunction TextGeometry( text, parameters ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TextGeometry';\n\n\tthis.parameters = {\n\t\ttext: text,\n\t\tparameters: parameters\n\t};\n\n\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\tthis.mergeVertices();\n\n}\n\nTextGeometry.prototype = Object.create( Geometry.prototype );\nTextGeometry.prototype.constructor = TextGeometry;\n\n// TextBufferGeometry\n\nfunction TextBufferGeometry( text, parameters ) {\n\n\tparameters = parameters || {};\n\n\tvar font = parameters.font;\n\n\tif ( ! ( font && font.isFont ) ) {\n\n\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\treturn new Geometry();\n\n\t}\n\n\tvar shapes = font.generateShapes( text, parameters.size, parameters.curveSegments );\n\n\t// translate parameters to ExtrudeGeometry API\n\n\tparameters.amount = parameters.height !== undefined ? parameters.height : 50;\n\n\t// defaults\n\n\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\tExtrudeBufferGeometry.call( this, shapes, parameters );\n\n\tthis.type = 'TextBufferGeometry';\n\n}\n\nTextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype );\nTextBufferGeometry.prototype.constructor = TextBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// SphereGeometry\n\nfunction SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'SphereGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nSphereGeometry.prototype = Object.create( Geometry.prototype );\nSphereGeometry.prototype.constructor = SphereGeometry;\n\n// SphereBufferGeometry\n\nfunction SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'SphereBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\n\twidthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );\n\theightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );\n\n\tphiStart = phiStart !== undefined ? phiStart : 0;\n\tphiLength = phiLength !== undefined ? phiLength : Math.PI * 2;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI;\n\n\tvar thetaEnd = thetaStart + thetaLength;\n\n\tvar ix, iy;\n\n\tvar index = 0;\n\tvar grid = [];\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\tvar verticesRow = [];\n\n\t\tvar v = iy / heightSegments;\n\n\t\tfor ( ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\tvar u = ix / widthSegments;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormal.set( vertex.x, vertex.y, vertex.z ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, 1 - v );\n\n\t\t\tverticesRow.push( index ++ );\n\n\t\t}\n\n\t\tgrid.push( verticesRow );\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\tvar a = grid[ iy ][ ix + 1 ];\n\t\t\tvar b = grid[ iy ][ ix ];\n\t\t\tvar c = grid[ iy + 1 ][ ix ];\n\t\t\tvar d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nSphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nSphereBufferGeometry.prototype.constructor = SphereBufferGeometry;\n\n/**\n * @author Kaleb Murphy\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// RingGeometry\n\nfunction RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'RingGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nRingGeometry.prototype = Object.create( Geometry.prototype );\nRingGeometry.prototype.constructor = RingGeometry;\n\n// RingBufferGeometry\n\nfunction RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'RingBufferGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tinnerRadius = innerRadius || 0.5;\n\touterRadius = outerRadius || 1;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\tthetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8;\n\tphiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// some helper variables\n\n\tvar segment;\n\tvar radius = innerRadius;\n\tvar radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= phiSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\tsegment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// increase the radius for next row of vertices\n\n\t\tradius += radiusStep;\n\n\t}\n\n\t// indices\n\n\tfor ( j = 0; j < phiSegments; j ++ ) {\n\n\t\tvar thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\tfor ( i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\tsegment = i + thetaSegmentLevel;\n\n\t\t\tvar a = segment;\n\t\t\tvar b = segment + thetaSegments + 1;\n\t\t\tvar c = segment + thetaSegments + 2;\n\t\t\tvar d = segment + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nRingBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nRingBufferGeometry.prototype.constructor = RingBufferGeometry;\n\n/**\n * @author astrodud / http://astrodud.isgreat.org/\n * @author zz85 / https://github.com/zz85\n * @author bhouston / http://clara.io\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// LatheGeometry\n\nfunction LatheGeometry( points, segments, phiStart, phiLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'LatheGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\tthis.mergeVertices();\n\n}\n\nLatheGeometry.prototype = Object.create( Geometry.prototype );\nLatheGeometry.prototype.constructor = LatheGeometry;\n\n// LatheBufferGeometry\n\nfunction LatheBufferGeometry( points, segments, phiStart, phiLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'LatheBufferGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tsegments = Math.floor( segments ) || 12;\n\tphiStart = phiStart || 0;\n\tphiLength = phiLength || Math.PI * 2;\n\n\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\tphiLength = _Math.clamp( phiLength, 0, Math.PI * 2 );\n\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar base;\n\tvar inverseSegments = 1.0 / segments;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar i, j;\n\n\t// generate vertices and uvs\n\n\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\tvar phi = phiStart + i * inverseSegments * phiLength;\n\n\t\tvar sin = Math.sin( phi );\n\t\tvar cos = Math.cos( phi );\n\n\t\tfor ( j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\tvertex.y = points[ j ].y;\n\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// uv\n\n\t\t\tuv.x = i / segments;\n\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( i = 0; i < segments; i ++ ) {\n\n\t\tfor ( j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\tbase = j + i * points.length;\n\n\t\t\tvar a = base;\n\t\t\tvar b = base + points.length;\n\t\t\tvar c = base + points.length + 1;\n\t\t\tvar d = base + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// generate normals\n\n\tthis.computeVertexNormals();\n\n\t// if the geometry is closed, we need to average the normals along the seam.\n\t// because the corresponding vertices are identical (but still have different UVs).\n\n\tif ( phiLength === Math.PI * 2 ) {\n\n\t\tvar normals = this.attributes.normal.array;\n\t\tvar n1 = new Vector3();\n\t\tvar n2 = new Vector3();\n\t\tvar n = new Vector3();\n\n\t\t// this is the buffer offset for the last line of vertices\n\n\t\tbase = segments * points.length * 3;\n\n\t\tfor ( i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t// select the normal of the vertex in the first line\n\n\t\t\tn1.x = normals[ j + 0 ];\n\t\t\tn1.y = normals[ j + 1 ];\n\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t// select the normal of the vertex in the last line\n\n\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t// average normals\n\n\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t// assign the new values to both normals\n\n\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t}\n\n\t}\n\n}\n\nLatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nLatheBufferGeometry.prototype.constructor = LatheBufferGeometry;\n\n/**\n * @author jonobr1 / http://jonobr1.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// ShapeGeometry\n\nfunction ShapeGeometry( shapes, curveSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ShapeGeometry';\n\n\tif ( typeof curveSegments === 'object' ) {\n\n\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\tcurveSegments = curveSegments.curveSegments;\n\n\t}\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\tthis.mergeVertices();\n\n}\n\nShapeGeometry.prototype = Object.create( Geometry.prototype );\nShapeGeometry.prototype.constructor = ShapeGeometry;\n\nShapeGeometry.prototype.toJSON = function () {\n\n\tvar data = Geometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON( shapes, data );\n\n};\n\n// ShapeBufferGeometry\n\nfunction ShapeBufferGeometry( shapes, curveSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ShapeBufferGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tcurveSegments = curveSegments || 12;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar groupStart = 0;\n\tvar groupCount = 0;\n\n\t// allow single and array values for \"shapes\" parameter\n\n\tif ( Array.isArray( shapes ) === false ) {\n\n\t\taddShape( shapes );\n\n\t} else {\n\n\t\tfor ( var i = 0; i < shapes.length; i ++ ) {\n\n\t\t\taddShape( shapes[ i ] );\n\n\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\tgroupStart += groupCount;\n\t\t\tgroupCount = 0;\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t// helper functions\n\n\tfunction addShape( shape ) {\n\n\t\tvar i, l, shapeHole;\n\n\t\tvar indexOffset = vertices.length / 3;\n\t\tvar points = shape.extractPoints( curveSegments );\n\n\t\tvar shapeVertices = points.shape;\n\t\tvar shapeHoles = points.holes;\n\n\t\t// check direction of vertices\n\n\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t// also check if holes are in the opposite direction\n\n\t\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tshapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t// join vertices of inner and outer paths to a single array\n\n\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\tshapeHole = shapeHoles[ i ];\n\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t}\n\n\t\t// vertices, normals, uvs\n\n\t\tfor ( i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\tvar vertex = shapeVertices[ i ];\n\n\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\tnormals.push( 0, 0, 1 );\n\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t}\n\n\t\t// incides\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar a = face[ 0 ] + indexOffset;\n\t\t\tvar b = face[ 1 ] + indexOffset;\n\t\t\tvar c = face[ 2 ] + indexOffset;\n\n\t\t\tindices.push( a, b, c );\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t}\n\n}\n\nShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry;\n\nShapeBufferGeometry.prototype.toJSON = function () {\n\n\tvar data = BufferGeometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON( shapes, data );\n\n};\n\n//\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tvar shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction EdgesGeometry( geometry, thresholdAngle ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'EdgesGeometry';\n\n\tthis.parameters = {\n\t\tthresholdAngle: thresholdAngle\n\t};\n\n\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle );\n\tvar edge = [ 0, 0 ], edges = {}, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\n\t// prepare source geometry\n\n\tvar geometry2;\n\n\tif ( geometry.isBufferGeometry ) {\n\n\t\tgeometry2 = new Geometry();\n\t\tgeometry2.fromBufferGeometry( geometry );\n\n\t} else {\n\n\t\tgeometry2 = geometry.clone();\n\n\t}\n\n\tgeometry2.mergeVertices();\n\tgeometry2.computeFaceNormals();\n\n\tvar sourceVertices = geometry2.vertices;\n\tvar faces = geometry2.faces;\n\n\t// now create a data structure where each entry represents an edge with its adjoining faces\n\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tvar face = faces[ i ];\n\n\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\tedge[ 0 ] = Math.min( edge1, edge2 );\n\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined };\n\n\t\t\t} else {\n\n\t\t\t\tedges[ key ].face2 = i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// generate vertices\n\n\tfor ( key in edges ) {\n\n\t\tvar e = edges[ key ];\n\n\t\t// an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\n\n\t\tif ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) {\n\n\t\t\tvar vertex = sourceVertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = sourceVertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nEdgesGeometry.prototype = Object.create( BufferGeometry.prototype );\nEdgesGeometry.prototype.constructor = EdgesGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// CylinderGeometry\n\nfunction CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CylinderGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCylinderGeometry.prototype = Object.create( Geometry.prototype );\nCylinderGeometry.prototype.constructor = CylinderGeometry;\n\n// CylinderBufferGeometry\n\nfunction CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CylinderBufferGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tvar scope = this;\n\n\tradiusTop = radiusTop !== undefined ? radiusTop : 1;\n\tradiusBottom = radiusBottom !== undefined ? radiusBottom : 1;\n\theight = height || 1;\n\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\n\topenEnded = openEnded !== undefined ? openEnded : false;\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0.0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar index = 0;\n\tvar indexArray = [];\n\tvar halfHeight = height / 2;\n\tvar groupStart = 0;\n\n\t// generate geometry\n\n\tgenerateTorso();\n\n\tif ( openEnded === false ) {\n\n\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction generateTorso() {\n\n\t\tvar x, y;\n\t\tvar normal = new Vector3();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\t// this will be used to calculate the normal\n\t\tvar slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\tvar indexRow = [];\n\n\t\t\tvar v = y / heightSegments;\n\n\t\t\t// calculate the radius of the current row\n\n\t\t\tvar radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tvar u = x / radialSegments;\n\n\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\t\tvar sinTheta = Math.sin( theta );\n\t\t\t\tvar cosTheta = Math.cos( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\t// now save vertices of the row in our index array\n\n\t\t\tindexArray.push( indexRow );\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tfor ( y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\tvar a = indexArray[ y ][ x ];\n\t\t\t\tvar b = indexArray[ y + 1 ][ x ];\n\t\t\t\tvar c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\tvar d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// update group counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n\tfunction generateCap( top ) {\n\n\t\tvar x, centerIndexStart, centerIndexEnd;\n\n\t\tvar uv = new Vector2();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\tvar radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\tvar sign = ( top === true ) ? 1 : - 1;\n\n\t\t// save the index of the first center vertex\n\t\tcenterIndexStart = index;\n\n\t\t// first we generate the center vertex data of the cap.\n\t\t// because the geometry needs one set of uvs per face,\n\t\t// we must generate a center vertex per face/segment\n\n\t\tfor ( x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// save the index of the last center vertex\n\n\t\tcenterIndexEnd = index;\n\n\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\tvar u = x / radialSegments;\n\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\tvar cosTheta = Math.cos( theta );\n\t\t\tvar sinTheta = Math.sin( theta );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * sinTheta;\n\t\t\tvertex.y = halfHeight * sign;\n\t\t\tvertex.z = radius * cosTheta;\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tvar c = centerIndexStart + x;\n\t\t\tvar i = centerIndexEnd + x;\n\n\t\t\tif ( top === true ) {\n\n\t\t\t\t// face top\n\n\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t} else {\n\n\t\t\t\t// face bottom\n\n\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t}\n\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n}\n\nCylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry;\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\n// ConeGeometry\n\nfunction ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeGeometry.prototype = Object.create( CylinderGeometry.prototype );\nConeGeometry.prototype.constructor = ConeGeometry;\n\n// ConeBufferGeometry\n\nfunction ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype );\nConeBufferGeometry.prototype.constructor = ConeBufferGeometry;\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n * @author hughes\n */\n\n// CircleGeometry\n\nfunction CircleGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CircleGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCircleGeometry.prototype = Object.create( Geometry.prototype );\nCircleGeometry.prototype.constructor = CircleGeometry;\n\n// CircleBufferGeometry\n\nfunction CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CircleBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\tsegments = segments !== undefined ? Math.max( 3, segments ) : 8;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, s;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\n\t// center point\n\n\tvertices.push( 0, 0, 0 );\n\tnormals.push( 0, 0, 1 );\n\tuvs.push( 0.5, 0.5 );\n\n\tfor ( s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\tvar segment = thetaStart + s / segments * thetaLength;\n\n\t\t// vertex\n\n\t\tvertex.x = radius * Math.cos( segment );\n\t\tvertex.y = radius * Math.sin( segment );\n\n\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t// normal\n\n\t\tnormals.push( 0, 0, 1 );\n\n\t\t// uvs\n\n\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\tuvs.push( uv.x, uv.y );\n\n\t}\n\n\t// indices\n\n\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\tindices.push( i, i + 1, 0 );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nCircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCircleBufferGeometry.prototype.constructor = CircleBufferGeometry;\n\n\n\nvar Geometries = Object.freeze({\n\tWireframeGeometry: WireframeGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricBufferGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeBufferGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusBufferGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextBufferGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereBufferGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingBufferGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneBufferGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheBufferGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeBufferGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeBufferGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderBufferGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleBufferGeometry,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxBufferGeometry\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * parameters = {\n * color: <THREE.Color>\n * }\n */\n\nfunction ShadowMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShadowMaterial';\n\n\tthis.color = new Color( 0x000000 );\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nShadowMaterial.prototype = Object.create( Material.prototype );\nShadowMaterial.prototype.constructor = ShadowMaterial;\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nShadowMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction RawShaderMaterial( parameters ) {\n\n\tShaderMaterial.call( this, parameters );\n\n\tthis.type = 'RawShaderMaterial';\n\n}\n\nRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\nRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * color: <hex>,\n * roughness: <float>,\n * metalness: <float>,\n * opacity: <float>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * lightMap: new THREE.Texture( <Image> ),\n * lightMapIntensity: <float>\n *\n * aoMap: new THREE.Texture( <Image> ),\n * aoMapIntensity: <float>\n *\n * emissive: <hex>,\n * emissiveIntensity: <float>\n * emissiveMap: new THREE.Texture( <Image> ),\n *\n * bumpMap: new THREE.Texture( <Image> ),\n * bumpScale: <float>,\n *\n * normalMap: new THREE.Texture( <Image> ),\n * normalScale: <Vector2>,\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>,\n *\n * roughnessMap: new THREE.Texture( <Image> ),\n *\n * metalnessMap: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: <float>\n *\n * refractionRatio: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction MeshStandardMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.type = 'MeshStandardMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.roughness = 0.5;\n\tthis.metalness = 0.5;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.roughnessMap = null;\n\n\tthis.metalnessMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.envMapIntensity = 1.0;\n\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshStandardMaterial.prototype = Object.create( Material.prototype );\nMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\nMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.color.copy( source.color );\n\tthis.roughness = source.roughness;\n\tthis.metalness = source.metalness;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.roughnessMap = source.roughnessMap;\n\n\tthis.metalnessMap = source.metalnessMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.envMapIntensity = source.envMapIntensity;\n\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * reflectivity: <float>\n * }\n */\n\nfunction MeshPhysicalMaterial( parameters ) {\n\n\tMeshStandardMaterial.call( this );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.type = 'MeshPhysicalMaterial';\n\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\tthis.clearCoat = 0.0;\n\tthis.clearCoatRoughness = 0.0;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\nMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\nMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.reflectivity = source.reflectivity;\n\n\tthis.clearCoat = source.clearCoat;\n\tthis.clearCoatRoughness = source.clearCoatRoughness;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * specular: <hex>,\n * shininess: <float>,\n * opacity: <float>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * lightMap: new THREE.Texture( <Image> ),\n * lightMapIntensity: <float>\n *\n * aoMap: new THREE.Texture( <Image> ),\n * aoMapIntensity: <float>\n *\n * emissive: <hex>,\n * emissiveIntensity: <float>\n * emissiveMap: new THREE.Texture( <Image> ),\n *\n * bumpMap: new THREE.Texture( <Image> ),\n * bumpScale: <float>,\n *\n * normalMap: new THREE.Texture( <Image> ),\n * normalScale: <Vector2>,\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>,\n *\n * specularMap: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: <float>,\n * refractionRatio: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction MeshPhongMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshPhongMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.specular = new Color( 0x111111 );\n\tthis.shininess = 30;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhongMaterial.prototype = Object.create( Material.prototype );\nMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\nMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.specular.copy( source.specular );\n\tthis.shininess = source.shininess;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author takahirox / http://github.com/takahirox\n *\n * parameters = {\n * gradientMap: new THREE.Texture( <Image> )\n * }\n */\n\nfunction MeshToonMaterial( parameters ) {\n\n\tMeshPhongMaterial.call( this );\n\n\tthis.defines = { 'TOON': '' };\n\n\tthis.type = 'MeshToonMaterial';\n\n\tthis.gradientMap = null;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype );\nMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\nMeshToonMaterial.prototype.copy = function ( source ) {\n\n\tMeshPhongMaterial.prototype.copy.call( this, source );\n\n\tthis.gradientMap = source.gradientMap;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * opacity: <float>,\n *\n * bumpMap: new THREE.Texture( <Image> ),\n * bumpScale: <float>,\n *\n * normalMap: new THREE.Texture( <Image> ),\n * normalScale: <Vector2>,\n *\n * displacementMap: new THREE.Texture( <Image> ),\n * displacementScale: <float>,\n * displacementBias: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction MeshNormalMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshNormalMaterial';\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshNormalMaterial.prototype = Object.create( Material.prototype );\nMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\nMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n *\n * map: new THREE.Texture( <Image> ),\n *\n * lightMap: new THREE.Texture( <Image> ),\n * lightMapIntensity: <float>\n *\n * aoMap: new THREE.Texture( <Image> ),\n * aoMapIntensity: <float>\n *\n * emissive: <hex>,\n * emissiveIntensity: <float>\n * emissiveMap: new THREE.Texture( <Image> ),\n *\n * specularMap: new THREE.Texture( <Image> ),\n *\n * alphaMap: new THREE.Texture( <Image> ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: <float>,\n * refractionRatio: <float>,\n *\n * wireframe: <boolean>,\n * wireframeLinewidth: <float>,\n *\n * skinning: <bool>,\n * morphTargets: <bool>,\n * morphNormals: <bool>\n * }\n */\n\nfunction MeshLambertMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshLambertMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshLambertMaterial.prototype = Object.create( Material.prototype );\nMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\nMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: <hex>,\n * opacity: <float>,\n *\n * linewidth: <float>,\n *\n * scale: <float>,\n * dashSize: <float>,\n * gapSize: <float>\n * }\n */\n\nfunction LineDashedMaterial( parameters ) {\n\n\tLineBasicMaterial.call( this );\n\n\tthis.type = 'LineDashedMaterial';\n\n\tthis.scale = 1;\n\tthis.dashSize = 3;\n\tthis.gapSize = 1;\n\n\tthis.setValues( parameters );\n\n}\n\nLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\nLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nLineDashedMaterial.prototype.copy = function ( source ) {\n\n\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\tthis.scale = source.scale;\n\tthis.dashSize = source.dashSize;\n\tthis.gapSize = source.gapSize;\n\n\treturn this;\n\n};\n\n\n\nvar Materials = Object.freeze({\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tvar scope = this;\n\n\tvar isLoading = false;\n\tvar itemsLoaded = 0;\n\tvar itemsTotal = 0;\n\tvar urlModifier = undefined;\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\t\treturn this;\n\n\t};\n\n}\n\nvar DefaultLoadingManager = new LoadingManager();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar loading = {};\n\nfunction FileLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FileLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tvar dataUriRegexResult = url.match( dataUriRegex );\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tvar mimeType = dataUriRegexResult[ 1 ];\n\t\t\tvar isBase64 = !! dataUriRegexResult[ 2 ];\n\t\t\tvar data = dataUriRegexResult[ 3 ];\n\n\t\t\tdata = window.decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = window.atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tvar response;\n\t\t\t\tvar responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tvar view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\tvar request = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tvar response = this.response;\n\n\t\t\t\tCache.add( url, response );\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 ) {\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else if ( this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( var header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( value ) {\n\n\t\tthis.requestHeader = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( CompressedTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar images = [];\n\n\t\tvar texture = new CompressedTexture();\n\t\ttexture.image = images;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tvar loaded = 0;\n\n\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Nikos M. / https://github.com/foo123/\n *\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( DataTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texture = new DataTexture();\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tvar texData = scope._parser( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( undefined !== texData.image ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( undefined !== texData.data ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter;\n\n\t\t\ttexture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;\n\n\t\t\tif ( undefined !== texData.format ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\t\t\tif ( undefined !== texData.type ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( undefined !== texData.mipmaps ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\n\t\t\t}\n\n\t\t\tif ( 1 === texData.mipmapCount ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ImageLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( ImageLoader.prototype, {\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tvar image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\timage.addEventListener( 'load', function () {\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}, false );\n\n\t\t/*\n\t\timage.addEventListener( 'progress', function ( event ) {\n\n\t\t\tif ( onProgress ) onProgress( event );\n\n\t\t}, false );\n\t\t*/\n\n\t\timage.addEventListener( 'error', function ( event ) {\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t}, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CubeTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( CubeTextureLoader.prototype, {\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new CubeTexture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tvar loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction TextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( TextureLoader.prototype, {\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new Texture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tvar isJPEG = url.search( /\\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Extensible curve object\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\n/**************************************************************\n *\tAbstract Curve base class\n **************************************************************/\n\nfunction Curve() {\n\n\tthis.type = 'Curve';\n\n\tthis.arcLengthDivisions = 200;\n\n}\n\nObject.assign( Curve.prototype, {\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t},\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t},\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get total curve arc length\n\n\tgetLength: function () {\n\n\t\tvar lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t},\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tvar cache = [];\n\t\tvar current, last = this.getPoint( 0 );\n\t\tvar p, sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t},\n\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t},\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping: function ( u, distance ) {\n\n\t\tvar arcLengths = this.getLengths();\n\n\t\tvar i = 0, il = arcLengths.length;\n\n\t\tvar targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tvar low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tvar lengthBefore = arcLengths[ i ];\n\t\tvar lengthAfter = arcLengths[ i + 1 ];\n\n\t\tvar segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tvar segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tvar t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t},\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent: function ( t ) {\n\n\t\tvar delta = 0.0001;\n\t\tvar t1 = t - delta;\n\t\tvar t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tvar pt1 = this.getPoint( t1 );\n\t\tvar pt2 = this.getPoint( t2 );\n\n\t\tvar vec = pt2.clone().sub( pt1 );\n\t\treturn vec.normalize();\n\n\t},\n\n\tgetTangentAt: function ( u ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t );\n\n\t},\n\n\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tvar normal = new Vector3();\n\n\t\tvar tangents = [];\n\t\tvar normals = [];\n\t\tvar binormals = [];\n\n\t\tvar vec = new Vector3();\n\t\tvar mat = new Matrix4();\n\n\t\tvar i, u, theta;\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\t\tu = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tvar min = Number.MAX_VALUE;\n\t\tvar tx = Math.abs( tangents[ 0 ].x );\n\t\tvar ty = Math.abs( tangents[ 0 ].y );\n\t\tvar tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\ttheta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\ttheta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'EllipseCurve';\n\n\tthis.aX = aX || 0;\n\tthis.aY = aY || 0;\n\n\tthis.xRadius = xRadius || 1;\n\tthis.yRadius = yRadius || 1;\n\n\tthis.aStartAngle = aStartAngle || 0;\n\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\tthis.aClockwise = aClockwise || false;\n\n\tthis.aRotation = aRotation || 0;\n\n}\n\nEllipseCurve.prototype = Object.create( Curve.prototype );\nEllipseCurve.prototype.constructor = EllipseCurve;\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar twoPi = Math.PI * 2;\n\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\n\tvar samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t// ensures that deltaAngle is 0 .. 2 PI\n\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\tif ( samePoints ) {\n\n\t\t\tdeltaAngle = 0;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = twoPi;\n\n\t\t}\n\n\t}\n\n\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\tdeltaAngle = - twoPi;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t}\n\n\t}\n\n\tvar angle = this.aStartAngle + t * deltaAngle;\n\tvar x = this.aX + this.xRadius * Math.cos( angle );\n\tvar y = this.aY + this.yRadius * Math.sin( angle );\n\n\tif ( this.aRotation !== 0 ) {\n\n\t\tvar cos = Math.cos( this.aRotation );\n\t\tvar sin = Math.sin( this.aRotation );\n\n\t\tvar tx = x - this.aX;\n\t\tvar ty = y - this.aY;\n\n\t\t// Rotate the point about the center of the ellipse.\n\t\tx = tx * cos - ty * sin + this.aX;\n\t\ty = tx * sin + ty * cos + this.aY;\n\n\t}\n\n\treturn point.set( x, y );\n\n};\n\nEllipseCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.aX = source.aX;\n\tthis.aY = source.aY;\n\n\tthis.xRadius = source.xRadius;\n\tthis.yRadius = source.yRadius;\n\n\tthis.aStartAngle = source.aStartAngle;\n\tthis.aEndAngle = source.aEndAngle;\n\n\tthis.aClockwise = source.aClockwise;\n\n\tthis.aRotation = source.aRotation;\n\n\treturn this;\n\n};\n\n\nEllipseCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.aX = this.aX;\n\tdata.aY = this.aY;\n\n\tdata.xRadius = this.xRadius;\n\tdata.yRadius = this.yRadius;\n\n\tdata.aStartAngle = this.aStartAngle;\n\tdata.aEndAngle = this.aEndAngle;\n\n\tdata.aClockwise = this.aClockwise;\n\n\tdata.aRotation = this.aRotation;\n\n\treturn data;\n\n};\n\nEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.aX = json.aX;\n\tthis.aY = json.aY;\n\n\tthis.xRadius = json.xRadius;\n\tthis.yRadius = json.yRadius;\n\n\tthis.aStartAngle = json.aStartAngle;\n\tthis.aEndAngle = json.aEndAngle;\n\n\tthis.aClockwise = json.aClockwise;\n\n\tthis.aRotation = json.aRotation;\n\n\treturn this;\n\n};\n\nfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\tthis.type = 'ArcCurve';\n\n}\n\nArcCurve.prototype = Object.create( EllipseCurve.prototype );\nArcCurve.prototype.constructor = ArcCurve;\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * @author zz85 https://github.com/zz85\n *\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tvar c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tvar t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tvar t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nvar tmp = new Vector3();\nvar px = new CubicPoly();\nvar py = new CubicPoly();\nvar pz = new CubicPoly();\n\nfunction CatmullRomCurve3( points, closed, curveType, tension ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CatmullRomCurve3';\n\n\tthis.points = points || [];\n\tthis.closed = closed || false;\n\tthis.curveType = curveType || 'centripetal';\n\tthis.tension = tension || 0.5;\n\n}\n\nCatmullRomCurve3.prototype = Object.create( Curve.prototype );\nCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\nCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar points = this.points;\n\tvar l = points.length;\n\n\tvar p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tif ( this.closed ) {\n\n\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / points.length ) + 1 ) * points.length;\n\n\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\tintPoint = l - 2;\n\t\tweight = 1;\n\n\t}\n\n\tvar p0, p1, p2, p3; // 4 points\n\n\tif ( this.closed || intPoint > 0 ) {\n\n\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate first point\n\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\tp0 = tmp;\n\n\t}\n\n\tp1 = points[ intPoint % l ];\n\tp2 = points[ ( intPoint + 1 ) % l ];\n\n\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate last point\n\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\tp3 = tmp;\n\n\t}\n\n\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t// init Centripetal / Chordal Catmull-Rom\n\t\tvar pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\tvar dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\tvar dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\tvar dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t// safety check for repeated points\n\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t}\n\n\tpoint.set(\n\t\tpx.calc( weight ),\n\t\tpy.calc( weight ),\n\t\tpz.calc( weight )\n\t);\n\n\treturn point;\n\n};\n\nCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\tthis.closed = source.closed;\n\tthis.curveType = source.curveType;\n\tthis.tension = source.tension;\n\n\treturn this;\n\n};\n\nCatmullRomCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\tdata.closed = this.closed;\n\tdata.curveType = this.curveType;\n\tdata.tension = this.tension;\n\n\treturn data;\n\n};\n\nCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t}\n\n\tthis.closed = json.closed;\n\tthis.curveType = json.curveType;\n\tthis.tension = json.tension;\n\n\treturn this;\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tvar v0 = ( p2 - p0 ) * 0.5;\n\tvar v1 = ( p3 - p1 ) * 0.5;\n\tvar t2 = t * t;\n\tvar t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tvar k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nfunction CubicBezierCurve( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\tthis.v3 = v3 || new Vector2();\n\n}\n\nCubicBezierCurve.prototype = Object.create( Curve.prototype );\nCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction CubicBezierCurve3( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\tthis.v3 = v3 || new Vector3();\n\n}\n\nCubicBezierCurve3.prototype = Object.create( Curve.prototype );\nCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction LineCurve( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve';\n\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nLineCurve.prototype = Object.create( Curve.prototype );\nLineCurve.prototype.constructor = LineCurve;\n\nLineCurve.prototype.isLineCurve = true;\n\nLineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve.prototype.getTangent = function ( /* t */ ) {\n\n\tvar tangent = this.v2.clone().sub( this.v1 );\n\n\treturn tangent.normalize();\n\n};\n\nLineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction LineCurve3( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve3';\n\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nLineCurve3.prototype = Object.create( Curve.prototype );\nLineCurve3.prototype.constructor = LineCurve3;\n\nLineCurve3.prototype.isLineCurve3 = true;\n\nLineCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve3( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction SplineCurve( points /* array of Vector2 */ ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'SplineCurve';\n\n\tthis.points = points || [];\n\n}\n\nSplineCurve.prototype = Object.create( Curve.prototype );\nSplineCurve.prototype.constructor = SplineCurve;\n\nSplineCurve.prototype.isSplineCurve = true;\n\nSplineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar points = this.points;\n\tvar p = ( points.length - 1 ) * t;\n\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tvar p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\tvar p1 = points[ intPoint ];\n\tvar p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\tvar p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\tpoint.set(\n\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t);\n\n\treturn point;\n\n};\n\nSplineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\treturn this;\n\n};\n\nSplineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\treturn data;\n\n};\n\nSplineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t}\n\n\treturn this;\n\n};\n\n\n\nvar Curves = Object.freeze({\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n **/\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nfunction CurvePath() {\n\n\tCurve.call( this );\n\n\tthis.type = 'CurvePath';\n\n\tthis.curves = [];\n\tthis.autoClose = false; // Automatically closes the path\n\n}\n\nCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\tconstructor: CurvePath,\n\n\tadd: function ( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t},\n\n\tclosePath: function () {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tvar startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tvar endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t},\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint: function ( t ) {\n\n\t\tvar d = t * this.getLength();\n\t\tvar curveLengths = this.getCurveLengths();\n\t\tvar i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tvar diff = curveLengths[ i ] - d;\n\t\t\t\tvar curve = this.curves[ i ];\n\n\t\t\t\tvar segmentLength = curve.getLength();\n\t\t\t\tvar u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 <d\n\n\t},\n\n\t// We cannot use the default THREE.Curve getPoint() with getLength() because in\n\t// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath\n\t// getPoint() depends on getLength\n\n\tgetLength: function () {\n\n\t\tvar lens = this.getCurveLengths();\n\t\treturn lens[ lens.length - 1 ];\n\n\t},\n\n\t// cacheLengths must be recalculated.\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.cacheLengths = null;\n\t\tthis.getCurveLengths();\n\n\t},\n\n\t// Compute lengths and cache them\n\t// We cannot overwrite getLengths() because UtoT mapping uses it.\n\n\tgetCurveLengths: function () {\n\n\t\t// We use cache values if curves and cache array are same length\n\n\t\tif ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {\n\n\t\t\treturn this.cacheLengths;\n\n\t\t}\n\n\t\t// Get length of sub-curve\n\t\t// Push sums into cached array\n\n\t\tvar lengths = [], sums = 0;\n\n\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tsums += this.curves[ i ].getLength();\n\t\t\tlengths.push( sums );\n\n\t\t}\n\n\t\tthis.cacheLengths = lengths;\n\n\t\treturn lengths;\n\n\t},\n\n\tgetSpacedPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 40;\n\n\t\tvar points = [];\n\n\t\tfor ( var i = 0; i <= divisions; i ++ ) {\n\n\t\t\tpoints.push( this.getPoint( i / divisions ) );\n\n\t\t}\n\n\t\tif ( this.autoClose ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tgetPoints: function ( divisions ) {\n\n\t\tdivisions = divisions || 12;\n\n\t\tvar points = [], last;\n\n\t\tfor ( var i = 0, curves = this.curves; i < curves.length; i ++ ) {\n\n\t\t\tvar curve = curves[ i ];\n\t\t\tvar resolution = ( curve && curve.isEllipseCurve ) ? divisions * 2\n\t\t\t\t: ( curve && curve.isLineCurve ) ? 1\n\t\t\t\t\t: ( curve && curve.isSplineCurve ) ? divisions * curve.points.length\n\t\t\t\t\t\t: divisions;\n\n\t\t\tvar pts = curve.getPoints( resolution );\n\n\t\t\tfor ( var j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\tvar point = pts[ j ];\n\n\t\t\t\tif ( last && last.equals( point ) ) continue; // ensures no consecutive points are duplicates\n\n\t\t\t\tpoints.push( point );\n\t\t\t\tlast = point;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.autoClose && points.length > 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Creates free form 2d path using series of points, lines or curves.\n **/\n\nfunction Path( points ) {\n\n\tCurvePath.call( this );\n\n\tthis.type = 'Path';\n\n\tthis.currentPoint = new Vector2();\n\n\tif ( points ) {\n\n\t\tthis.setFromPoints( points );\n\n\t}\n\n}\n\nPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\tconstructor: Path,\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( var i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t},\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tvar curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tvar curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tvar curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\tvar npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tvar curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t},\n\n\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t},\n\n\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tvar firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tvar lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = CurvePath.prototype.toJSON.call( this );\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Defines a 2d shape plane using paths.\n **/\n\n// STEP 1 Create a path.\n// STEP 2 Turn path into shape.\n// STEP 3 ExtrudeGeometry takes in Shape/Shapes\n// STEP 3a - Extract points from each shape, turn to vertices\n// STEP 3b - Triangulate each shape, add faces.\n\nfunction Shape( points ) {\n\n\tPath.call( this, points );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.type = 'Shape';\n\n\tthis.holes = [];\n\n}\n\nShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\tconstructor: Shape,\n\n\tgetPointsHoles: function ( divisions ) {\n\n\t\tvar holesPts = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t},\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints: function ( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tPath.prototype.copy.call( this, source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Path.prototype.toJSON.call( this );\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Light( color, intensity ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Light';\n\n\tthis.color = new Color( color );\n\tthis.intensity = intensity !== undefined ? intensity : 1;\n\n\tthis.receiveShadow = undefined;\n\n}\n\nLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Light,\n\n\tisLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\tLight.call( this, skyColor, intensity );\n\n\tthis.type = 'HemisphereLight';\n\n\tthis.castShadow = undefined;\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.groundColor = new Color( groundColor );\n\n}\n\nHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: HemisphereLight,\n\n\tisHemisphereLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LightShadow( camera ) {\n\n\tthis.camera = camera;\n\n\tthis.bias = 0;\n\tthis.radius = 1;\n\n\tthis.mapSize = new Vector2( 512, 512 );\n\n\tthis.map = null;\n\tthis.matrix = new Matrix4();\n\n}\n\nObject.assign( LightShadow.prototype, {\n\n\tcopy: function ( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction SpotLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n}\n\nSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: SpotLightShadow,\n\n\tisSpotLightShadow: true,\n\n\tupdate: function ( light ) {\n\n\t\tvar camera = this.camera;\n\n\t\tvar fov = _Math.RAD2DEG * 2 * light.angle;\n\t\tvar aspect = this.mapSize.width / this.mapSize.height;\n\t\tvar far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'SpotLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / Math.PI;\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new SpotLightShadow();\n\n}\n\nSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: SpotLight,\n\n\tisSpotLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction PointLight( color, intensity, distance, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'PointLight';\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n}\n\nPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: PointLight,\n\n\tisPointLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectionalLightShadow( ) {\n\n\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n}\n\nDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: DirectionalLightShadow\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DirectionalLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'DirectionalLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tthis.shadow = new DirectionalLightShadow();\n\n}\n\nDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: DirectionalLight,\n\n\tisDirectionalLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AmbientLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'AmbientLight';\n\n\tthis.castShadow = undefined;\n\n}\n\nAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: AmbientLight,\n\n\tisAmbientLight: true\n\n} );\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\nfunction RectAreaLight( color, intensity, width, height ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'RectAreaLight';\n\n\tthis.width = ( width !== undefined ) ? width : 10;\n\tthis.height = ( height !== undefined ) ? height : 10;\n\n}\n\nRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: RectAreaLight,\n\n\tisRectAreaLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n *\n * A Track that interpolates Strings\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: StringKeyframeTrack,\n\n\tValueTypeName: 'string',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\n\tInterpolantFactoryMethodSmooth: undefined\n\n} );\n\n/**\n *\n * A Track of Boolean keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction BooleanKeyframeTrack( name, times, values ) {\n\n\tKeyframeTrack.call( this, name, times, values );\n\n}\n\nBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: BooleanKeyframeTrack,\n\n\tValueTypeName: 'bool',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\tInterpolantFactoryMethodSmooth: undefined\n\n\t// Note: Actually this track could have a optimized / compressed\n\t// representation of a single value and a custom interpolant that\n\t// computes \"firstValue ^ isOdd( index )\".\n\n} );\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n * @author tschw\n */\n\nfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tthis.parameterPositions = parameterPositions;\n\tthis._cachedIndex = 0;\n\n\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\tthis.sampleValues = sampleValues;\n\tthis.valueSize = sampleSize;\n\n}\n\nObject.assign( Interpolant.prototype, {\n\n\tevaluate: function ( t ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\ti1 = this._cachedIndex,\n\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tvar right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tvar t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tvar mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t},\n\n\tsettings: null, // optional, subclass-specific settings structure\n\t// Note: The indirection allows central control of many interpolants.\n\n\t// --- Protected interface\n\n\tDefaultSettings_: {},\n\n\tgetSettings_: function () {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t},\n\n\tcopySampleValue_: function ( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// Template methods for derived classes:\n\n\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t},\n\n\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( Interpolant.prototype, {\n\n\t//( 0, t, t0 ), returns this.resultBuffer\n\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t//( N-1, tN-1, t ), returns this.resultBuffer\n\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n} );\n\n/**\n * Spherical linear unit quaternion interpolant.\n *\n * @author tschw\n */\n\nfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: QuaternionLinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset = i1 * stride,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tfor ( var end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of quaternion keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: QuaternionKeyframeTrack,\n\n\tValueTypeName: 'quaternion',\n\n\t// ValueBufferType is inherited\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n} );\n\n/**\n *\n * A Track of keyframe values that represent color.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: ColorKeyframeTrack,\n\n\tValueTypeName: 'color'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n\t// Note: Very basic implementation and nothing special yet.\n\t// However, this is the place for color space parameterization.\n\n} );\n\n/**\n *\n * A Track of numeric keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: NumberKeyframeTrack,\n\n\tValueTypeName: 'number'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n *\n * @author tschw\n */\n\nfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\tthis._weightPrev = - 0;\n\tthis._offsetPrev = - 0;\n\tthis._weightNext = - 0;\n\tthis._offsetNext = - 0;\n\n}\n\nCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: CubicInterpolant,\n\n\tDefaultSettings_: {\n\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\n\t},\n\n\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\tiPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t},\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tvar sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tvar s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tvar s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tvar sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n */\n\nfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: LinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n *\n * @author tschw\n */\n\nfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: DiscreteInterpolant,\n\n\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n} );\n\n/**\n * @author tschw\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nvar AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tvar n = times.length;\n\t\tvar result = new Array( n );\n\t\tfor ( var i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tvar nValues = values.length;\n\t\tvar result = new values.constructor( nValues );\n\n\t\tfor ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tvar srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tvar i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tvar value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t}\n\n};\n\n/**\n *\n * A timed sequence of keyframes for a specific property.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\tthis.name = name;\n\n\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\tthis.validate();\n\tthis.optimize();\n\n}\n\n// Static methods:\n\nObject.assign( KeyframeTrack, {\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tparse: function ( json ) {\n\n\t\tif ( json.type === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t\t}\n\n\t\tvar trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type );\n\n\t\tif ( json.times === undefined ) {\n\n\t\t\tvar times = [], values = [];\n\n\t\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\t\tjson.times = times;\n\t\t\tjson.values = values;\n\n\t\t}\n\n\t\t// derived classes can define a static parse method\n\t\tif ( trackType.parse !== undefined ) {\n\n\t\t\treturn trackType.parse( json );\n\n\t\t} else {\n\n\t\t\t// by default, we assume a constructor compatible with the base\n\t\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( track ) {\n\n\t\tvar trackType = track.constructor;\n\n\t\tvar json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tvar interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t},\n\n\t_getTrackTypeForValueTypeName: function ( typeName ) {\n\n\t\tswitch ( typeName.toLowerCase() ) {\n\n\t\t\tcase 'scalar':\n\t\t\tcase 'double':\n\t\t\tcase 'float':\n\t\t\tcase 'number':\n\t\t\tcase 'integer':\n\n\t\t\t\treturn NumberKeyframeTrack;\n\n\t\t\tcase 'vector':\n\t\t\tcase 'vector2':\n\t\t\tcase 'vector3':\n\t\t\tcase 'vector4':\n\n\t\t\t\treturn VectorKeyframeTrack;\n\n\t\t\tcase 'color':\n\n\t\t\t\treturn ColorKeyframeTrack;\n\n\t\t\tcase 'quaternion':\n\n\t\t\t\treturn QuaternionKeyframeTrack;\n\n\t\t\tcase 'bool':\n\t\t\tcase 'boolean':\n\n\t\t\t\treturn BooleanKeyframeTrack;\n\n\t\t\tcase 'string':\n\n\t\t\t\treturn StringKeyframeTrack;\n\n\t\t}\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n\t}\n\n} );\n\nObject.assign( KeyframeTrack.prototype, {\n\n\tconstructor: KeyframeTrack,\n\n\tTimeBufferType: Float32Array,\n\n\tValueBufferType: Float32Array,\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tsetInterpolation: function ( interpolation ) {\n\n\t\tvar factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tvar message = \"unsupported interpolation for \" +\n\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t},\n\n\tgetInterpolation: function () {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t},\n\n\tgetValueSize: function () {\n\n\t\treturn this.values.length / this.times.length;\n\n\t},\n\n\t// move all keyframes either forwards or backwards in time\n\tshift: function ( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale: function ( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim: function ( startTime, endTime ) {\n\n\t\tvar times = this.times,\n\t\t\tnKeys = times.length,\n\t\t\tfrom = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) to = Math.max( to, 1 ), from = to - 1;\n\n\t\t\tvar stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate: function () {\n\n\t\tvar valid = true;\n\n\t\tvar valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar prevTime = null;\n\n\t\tfor ( var i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tvar currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( var i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize: function () {\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\twriteIndex = 1,\n\t\t\tlastIndex = times.length - 1;\n\n\t\tfor ( var i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tvar keep = false;\n\n\t\t\tvar time = times[ i ];\n\t\t\tvar timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tvar offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvar value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tvar readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of vectored keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: VectorKeyframeTrack,\n\n\tValueTypeName: 'vector'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n *\n * Reusable set of Tracks that represent an animation.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nfunction AnimationClip( name, duration, tracks ) {\n\n\tthis.name = name;\n\tthis.tracks = tracks;\n\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// this means it should figure out its duration by scanning the tracks\n\tif ( this.duration < 0 ) {\n\n\t\tthis.resetDuration();\n\n\t}\n\n\tthis.optimize();\n\n}\n\nObject.assign( AnimationClip, {\n\n\tparse: function ( json ) {\n\n\t\tvar tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( json.name, json.duration, tracks );\n\n\t},\n\n\ttoJSON: function ( clip ) {\n\n\t\tvar tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tvar json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks\n\n\t\t};\n\n\t\tfor ( var i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t},\n\n\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tvar numMorphTargets = morphTargetSequence.length;\n\t\tvar tracks = [];\n\n\t\tfor ( var i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tvar times = [];\n\t\t\tvar values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tvar order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t},\n\n\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\tvar clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tvar o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( var i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\tvar animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tvar pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( var i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = morphTargets[ i ];\n\t\t\tvar parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tvar name = parts[ 1 ];\n\n\t\t\t\tvar animationMorphTargets = animationToMorphTargets[ name ];\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar clips = [];\n\n\t\tfor ( var name in animationToMorphTargets ) {\n\n\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t},\n\n\t// parse the animation.hierarchy format\n\tparseAnimation: function ( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tvar tracks = [];\n\n\t\tvar clipName = animation.name || 'default';\n\t\t// automatic length determination in AnimationClip.\n\t\tvar duration = animation.length || - 1;\n\t\tvar fps = animation.fps || 30;\n\n\t\tvar hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( var h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tvar animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tvar morphTargetNames = {};\n\n\t\t\t\tfor ( var k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( var morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tvar times = [];\n\t\t\t\t\tvar values = [];\n\n\t\t\t\t\tfor ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tvar animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tvar boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar clip = new AnimationClip( clipName, duration, tracks );\n\n\t\treturn clip;\n\n\t}\n\n} );\n\nObject.assign( AnimationClip.prototype, {\n\n\tresetDuration: function () {\n\n\t\tvar tracks = this.tracks, duration = 0;\n\n\t\tfor ( var i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tvar track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t},\n\n\ttrim: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\toptimize: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction MaterialLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.textures = {};\n\n}\n\nObject.assign( MaterialLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tvar material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat;\n\t\tif ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness;\n\t\tif ( json.uniforms !== undefined ) material.uniforms = json.uniforms;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\n\t\tif ( json.alphaMap !== undefined ) {\n\n\t\t\tmaterial.alphaMap = getTexture( json.alphaMap );\n\t\t\tmaterial.transparent = true;\n\n\t\t}\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tvar normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\treturn material;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferGeometryLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( BufferGeometryLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tvar attributes = json.data.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\t\t\tvar typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\n\t\t\tgeometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) );\n\n\t\t}\n\n\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( var i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tvar center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nvar TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\t// Workaround for IE11 pre KB2929437. See #11440\n\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: undefined,\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = _Math.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: _Math.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nvar LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tvar s = '';\n\n\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\t// Merges multi-byte utf-8 characters.\n\t\treturn decodeURIComponent( escape( s ) );\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tvar parts = url.split( '/' );\n\n\t\tif ( parts.length === 1 ) return './';\n\n\t\tparts.pop();\n\n\t\treturn parts.join( '/' ) + '/';\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined && json.morphColors.length > 0 ) {\n\n\t\t\t\tconsole.warn( 'THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.' );\n\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar morphColors = json.morphColors[ 0 ].colors;\n\n\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tfaces[ i ].color.fromArray( morphColors, i * 3 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin );\n\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ObjectLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.texturePath = '';\n\n}\n\nObject.assign( ObjectLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.texturePath === '' ) {\n\n\t\t\tthis.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );\n\n\t\t}\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url + '. Use THREE.JSONLoader instead.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\n\t},\n\n\tparse: function ( json, onLoad ) {\n\n\t\tvar shapes = this.parseShape( json.shapes );\n\t\tvar geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tvar images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tvar textures = this.parseTextures( json.textures, images );\n\t\tvar materials = this.parseMaterials( json.materials, textures );\n\n\t\tvar object = this.parseObject( json.object, geometries, materials );\n\n\t\tif ( json.animations ) {\n\n\t\t\tobject.animations = this.parseAnimations( json.animations );\n\n\t\t}\n\n\t\tif ( json.images === undefined || json.images.length === 0 ) {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t},\n\n\tparseShape: function ( json ) {\n\n\t\tvar shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t},\n\n\tparseGeometries: function ( json, shapes ) {\n\n\t\tvar geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar geometryLoader = new JSONLoader();\n\t\t\tvar bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar geometry;\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\tfor ( var i = 0, l = data.shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ i ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tgeometry = geometryLoader.parse( data, this.texturePath ).geometry;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t},\n\n\tparseMaterials: function ( json, textures ) {\n\n\t\tvar materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tvar array = [];\n\n\t\t\t\t\tfor ( var j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tarray.push( loader.parse( data.materials[ j ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t},\n\n\tparseAnimations: function ( json ) {\n\n\t\tvar animations = [];\n\n\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\tvar clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t},\n\n\tparseImages: function ( json, onLoad ) {\n\n\t\tvar scope = this;\n\t\tvar images = {};\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tvar manager = new LoadingManager( onLoad );\n\n\t\t\tvar loader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar image = json[ i ];\n\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;\n\n\t\t\t\timages[ image.uuid ] = loadImage( path );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t},\n\n\tparseTextures: function ( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tvar textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tvar texture = new Texture( images[ data.image ] );\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t},\n\n\tparseObject: function ( data, geometries, materials ) {\n\n\t\tvar object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor ( var i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tvar geometry = getGeometry( data.geometry );\n\t\t\t\tvar material = getMaterial( data.material );\n\n\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 ) {\n\n\t\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tvar children = data.children;\n\n\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tvar levels = data.levels;\n\n\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tvar level = levels[ l ];\n\t\t\t\tvar child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n} );\n\nvar TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tSphericalReflectionMapping: SphericalReflectionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nvar TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nvar TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipMapNearestFilter: NearestMipMapNearestFilter,\n\tNearestMipMapLinearFilter: NearestMipMapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipMapNearestFilter: LinearMipMapNearestFilter,\n\tLinearMipMapLinearFilter: LinearMipMapLinearFilter\n};\n\n/**\n * @author thespite / http://clicktorelease.com/\n */\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\tthis.manager = manager !== undefined ? manager : DefaultLoadingManager;\n\tthis.options = undefined;\n\n}\n\nImageBitmapLoader.prototype = {\n\n\tconstructor: ImageBitmapLoader,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function load( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tfetch( url ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t} );\n\n\t},\n\n\tsetCrossOrigin: function ( /* value */ ) {\n\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * minimal class for proxing functions to Path. Replaces old \"extractSubpaths()\"\n **/\n\nfunction ShapePath() {\n\n\tthis.type = 'ShapePath';\n\n\tthis.subPaths = [];\n\tthis.currentPath = null;\n\n}\n\nObject.assign( ShapePath.prototype, {\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tvar shapes = [];\n\n\t\t\tfor ( var i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tvar tmpPath = inSubpaths[ i ];\n\n\t\t\t\tvar tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tvar polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tvar inside = false;\n\t\t\tfor ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tvar edgeLowPt = inPolygon[ p ];\n\t\t\t\tvar edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tvar isClockWise = ShapeUtils.isClockWise;\n\n\t\tvar subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tvar solid, tmpPath, tmpShape, shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tvar holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tvar betterShapeHoles = [];\n\t\tvar newShapes = [];\n\t\tvar newShapeHoles = [];\n\t\tvar mainIdx = 0;\n\t\tvar tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( var i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tvar ambiguous = false;\n\t\t\tvar toChange = [];\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tvar sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tvar ho = sho[ hIdx ];\n\t\t\t\t\tvar hole_unassigned = true;\n\n\t\t\t\t\tfor ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar tmpHoles;\n\n\t\tfor ( var i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Font( data ) {\n\n\tthis.type = 'Font';\n\n\tthis.data = data;\n\n}\n\nObject.assign( Font.prototype, {\n\n\tisFont: true,\n\n\tgenerateShapes: function ( text, size, divisions ) {\n\n\t\tif ( size === undefined ) size = 100;\n\t\tif ( divisions === undefined ) divisions = 4;\n\n\t\tvar shapes = [];\n\t\tvar paths = createPaths( text, size, divisions, this.data );\n\n\t\tfor ( var p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction createPaths( text, size, divisions, data ) {\n\n\tvar chars = String( text ).split( '' );\n\tvar scale = size / data.resolution;\n\tvar line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tvar paths = [];\n\n\tvar offsetX = 0, offsetY = 0;\n\n\tfor ( var i = 0; i < chars.length; i ++ ) {\n\n\t\tvar char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tvar ret = createPath( char, divisions, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, divisions, scale, offsetX, offsetY, data ) {\n\n\tvar glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) return;\n\n\tvar path = new ShapePath();\n\n\tvar x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tvar outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( var i = 0, l = outline.length; i < l; ) {\n\n\t\t\tvar action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction FontLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FontLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tvar font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\treturn new Font( json );\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar context;\n\nvar AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( context === undefined ) {\n\n\t\t\tcontext = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\tcontext = value;\n\n\t}\n\n};\n\n/**\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction AudioLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( AudioLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tvar context = AudioContext.getContext();\n\n\t\t\tcontext.decodeAudioData( buffer, function ( audioBuffer ) {\n\n\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t} );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction StereoCamera() {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.eyeSep = 0.064;\n\n\tthis.cameraL = new PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: ( function () {\n\n\t\tvar instance, focus, fov, aspect, near, far, zoom, eyeSep;\n\n\t\tvar eyeRight = new Matrix4();\n\t\tvar eyeLeft = new Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tinstance = this;\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\teyeSep = this.eyeSep / 2;\n\t\t\t\tvar eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tvar ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom;\n\t\t\t\tvar xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * Camera for rendering cube maps\n *\t- renders scene into axis-aligned cube\n *\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CubeCamera( near, far, cubeResolution ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tvar fov = 90, aspect = 1;\n\n\tvar cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tvar cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tvar cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tvar cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tvar cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tvar cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tvar options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter };\n\n\tthis.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options );\n\tthis.renderTarget.texture.name = \"CubeCamera\";\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tvar renderTarget = this.renderTarget;\n\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderTarget.activeCubeFace = 0;\n\t\trenderer.render( scene, cameraPX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 1;\n\t\trenderer.render( scene, cameraNX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 2;\n\t\trenderer.render( scene, cameraPY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 3;\n\t\trenderer.render( scene, cameraNY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 4;\n\t\trenderer.render( scene, cameraPZ, renderTarget );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderTarget.activeCubeFace = 5;\n\t\trenderer.render( scene, cameraNZ, renderTarget );\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n\tthis.clear = function ( renderer, color, depth, stencil ) {\n\n\t\tvar renderTarget = this.renderTarget;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\trenderTarget.activeCubeFace = i;\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioListener() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'AudioListener';\n\n\tthis.context = AudioContext.getContext();\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( this.context.destination );\n\n\tthis.filter = null;\n\n}\n\nAudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: AudioListener,\n\n\tgetInput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tremoveFilter: function ( ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.filter;\n\n\t},\n\n\tsetFilter: function ( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t},\n\n\tgetMasterVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetMasterVolume: function ( value ) {\n\n\t\tthis.gain.gain.value = value;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3();\n\n\t\tvar orientation = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tvar listener = this.context.listener;\n\t\t\tvar up = this.up;\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\torientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\tif ( listener.positionX ) {\n\n\t\t\t\tlistener.positionX.setValueAtTime( position.x, this.context.currentTime );\n\t\t\t\tlistener.positionY.setValueAtTime( position.y, this.context.currentTime );\n\t\t\t\tlistener.positionZ.setValueAtTime( position.z, this.context.currentTime );\n\t\t\t\tlistener.forwardX.setValueAtTime( orientation.x, this.context.currentTime );\n\t\t\t\tlistener.forwardY.setValueAtTime( orientation.y, this.context.currentTime );\n\t\t\t\tlistener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime );\n\t\t\t\tlistener.upX.setValueAtTime( up.x, this.context.currentTime );\n\t\t\t\tlistener.upY.setValueAtTime( up.y, this.context.currentTime );\n\t\t\t\tlistener.upZ.setValueAtTime( up.z, this.context.currentTime );\n\n\t\t\t} else {\n\n\t\t\t\tlistener.setPosition( position.x, position.y, position.z );\n\t\t\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction Audio( listener ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Audio';\n\n\tthis.context = listener.context;\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( listener.getInput() );\n\n\tthis.autoplay = false;\n\n\tthis.buffer = null;\n\tthis.loop = false;\n\tthis.startTime = 0;\n\tthis.offset = 0;\n\tthis.playbackRate = 1;\n\tthis.isPlaying = false;\n\tthis.hasPlaybackControl = true;\n\tthis.sourceType = 'empty';\n\n\tthis.filters = [];\n\n}\n\nAudio.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Audio,\n\n\tgetOutput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tsetNodeSource: function ( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetBuffer: function ( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t},\n\n\tplay: function () {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar source = this.context.createBufferSource();\n\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.playbackRate.setValueAtTime( this.playbackRate, this.startTime );\n\t\tthis.startTime = this.context.currentTime;\n\t\tsource.start( this.startTime, this.offset );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\treturn this.connect();\n\n\t},\n\n\tpause: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.offset += ( this.context.currentTime - this.startTime ) * this.playbackRate;\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.source.stop();\n\t\tthis.offset = 0;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t},\n\n\tconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilters: function () {\n\n\t\treturn this.filters;\n\n\t},\n\n\tsetFilters: function ( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value;\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t},\n\n\tsetFilter: function ( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t},\n\n\tsetPlaybackRate: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetPlaybackRate: function () {\n\n\t\treturn this.playbackRate;\n\n\t},\n\n\tonEnded: function () {\n\n\t\tthis.isPlaying = false;\n\n\t},\n\n\tgetLoop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t},\n\n\tsetLoop: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetVolume: function ( value ) {\n\n\t\tthis.gain.gain.value = value;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PositionalAudio( listener ) {\n\n\tAudio.call( this, listener );\n\n\tthis.panner = this.context.createPanner();\n\tthis.panner.connect( this.gain );\n\n}\n\nPositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), {\n\n\tconstructor: PositionalAudio,\n\n\tgetOutput: function () {\n\n\t\treturn this.panner;\n\n\t},\n\n\tgetRefDistance: function () {\n\n\t\treturn this.panner.refDistance;\n\n\t},\n\n\tsetRefDistance: function ( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t},\n\n\tgetRolloffFactor: function () {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t},\n\n\tsetRolloffFactor: function ( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t},\n\n\tgetDistanceModel: function () {\n\n\t\treturn this.panner.distanceModel;\n\n\t},\n\n\tsetDistanceModel: function ( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t},\n\n\tgetMaxDistance: function () {\n\n\t\treturn this.panner.maxDistance;\n\n\t},\n\n\tsetMaxDistance: function ( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tposition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tthis.panner.setPosition( position.x, position.y, position.z );\n\n\t\t};\n\n\t} )()\n\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioAnalyser( audio, fftSize ) {\n\n\tthis.analyser = audio.context.createAnalyser();\n\tthis.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;\n\n\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\taudio.getOutput().connect( this.analyser );\n\n}\n\nObject.assign( AudioAnalyser.prototype, {\n\n\tgetFrequencyData: function () {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t},\n\n\tgetAverageFrequency: function () {\n\n\t\tvar value = 0, data = this.getFrequencyData();\n\n\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n} );\n\n/**\n *\n * Buffered scene graph property that allows weighted accumulation.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tvar bufferType = Float64Array,\n\t\tmixFunction;\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tbufferType = Array;\n\t\t\tmixFunction = this._select;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\n\t}\n\n\tthis.buffer = new bufferType( valueSize * 4 );\n\t// layout: [ incoming | accu0 | accu1 | orig ]\n\t//\n\t// interpolators can use .buffer as their .result\n\t// the data then goes to 'incoming'\n\t//\n\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t// the cumulative result and are compared to detect\n\t// changes\n\t//\n\t// 'orig' stores the original state of the property\n\n\tthis._mixBufferRegion = mixFunction;\n\n\tthis.cumulativeWeight = 0;\n\n\tthis.useCount = 0;\n\tthis.referenceCount = 0;\n\n}\n\nObject.assign( PropertyMixer.prototype, {\n\n\t// accumulate data in the 'incoming' region into 'accu<i>'\n\taccumulate: function ( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tcurrentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tvar mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t},\n\n\t// apply the state of 'accu<i>' to the binding when accus differ\n\tapply: function ( accuIndex ) {\n\n\t\tvar stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tvar originalValueOffset = stride * 3;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tfor ( var i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState: function () {\n\n\t\tvar binding = this.binding;\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * 3;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( var i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\tthis.cumulativeWeight = 0;\n\n\t},\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState: function () {\n\n\t\tvar originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t},\n\n\n\t// mix functions\n\n\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t},\n\n\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tvar s = 1 - t;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tvar j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * A reference to a real property in the scene graph.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\n// Characters [].:/ are reserved for track binding syntax.\nvar RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tvar parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis._targetGroup = targetGroup;\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n}\n\nObject.assign( Composite.prototype, {\n\n\tgetValue: function ( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tvar firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t},\n\n\tsetValue: function ( array, offset ) {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t},\n\n\tbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t},\n\n\tunbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n} );\n\n\nfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\tthis.path = path;\n\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\tthis.rootNode = rootNode;\n\n}\n\nObject.assign( PropertyBinding, {\n\n\tComposite: Composite,\n\n\tcreate: function ( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tsanitizeNodeName: ( function () {\n\n\t\tvar reservedRe = new RegExp( '[' + RESERVED_CHARS_RE + ']', 'g' );\n\n\t\treturn function sanitizeNodeName( name ) {\n\n\t\t\treturn name.replace( /\\s/g, '_' ).replace( reservedRe, '' );\n\n\t\t};\n\n\t}() ),\n\n\tparseTrackName: function () {\n\n\t\t// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n\t\t// only latin characters, and the unicode \\p{L} is not yet supported. So\n\t\t// instead, we exclude reserved characters and match everything else.\n\t\tvar wordChar = '[^' + RESERVED_CHARS_RE + ']';\n\t\tvar wordCharOrDot = '[^' + RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n\t\t// Parent directories, delimited by '/' or ':'. Currently unused, but must\n\t\t// be matched to parse the rest of the track name.\n\t\tvar directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', wordChar );\n\n\t\t// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n\t\tvar nodeRe = /(WCOD+)?/.source.replace( 'WCOD', wordCharOrDot );\n\n\t\t// Object on target node, and accessor. May not contain reserved\n\t\t// characters. Accessor may contain any character except closing bracket.\n\t\tvar objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', wordChar );\n\n\t\t// Property and accessor. May not contain reserved characters. Accessor may\n\t\t// contain any non-bracket characters.\n\t\tvar propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', wordChar );\n\n\t\tvar trackRe = new RegExp( ''\n\t\t\t+ '^'\n\t\t\t+ directoryRe\n\t\t\t+ nodeRe\n\t\t\t+ objectRe\n\t\t\t+ propertyRe\n\t\t\t+ '$'\n\t\t);\n\n\t\tvar supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\n\t\treturn function parseTrackName( trackName ) {\n\n\t\t\tvar matches = trackRe.exec( trackName );\n\n\t\t\tif ( ! matches ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\tvar results = {\n\t\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\t\tnodeName: matches[ 2 ],\n\t\t\t\tobjectName: matches[ 3 ],\n\t\t\t\tobjectIndex: matches[ 4 ],\n\t\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\t\tpropertyIndex: matches[ 6 ]\n\t\t\t};\n\n\t\t\tvar lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\t\tvar objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t\t// Object names must be checked against a whitelist. Otherwise, there\n\t\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t\t// include '.' characters).\n\t\t\t\tif ( supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\t\tresults.objectName = objectName;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\treturn results;\n\n\t\t};\n\n\t}(),\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === \"\" || nodeName === \"root\" || nodeName === \".\" || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tvar bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tvar searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tvar childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tvar subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n} );\n\nObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable: function () {},\n\t_setValue_unavailable: function () {},\n\n\tBindingType: {\n\t\tDirect: 0,\n\t\tEntireArray: 1,\n\t\tArrayElement: 2,\n\t\tHasFromToArray: 3\n\t},\n\n\tVersioning: {\n\t\tNone: 0,\n\t\tNeedsUpdate: 1,\n\t\tMatrixWorldNeedsUpdate: 2\n\t},\n\n\tGetterByBindingType: [\n\n\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t},\n\n\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\tvar source = this.resolvedProperty;\n\n\t\t\tfor ( var i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t}\n\n\t\t},\n\n\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t},\n\n\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t}\n\n\t],\n\n\tSetterByBindingTypeAndVersioning: [\n\n\t\t[\n\t\t\t// Direct\n\n\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// EntireArray\n\n\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// ArrayElement\n\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// HasToFromArray\n\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t]\n\n\t],\n\n\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t// prototype version of these methods with one that represents\n\t\t// the bound state. When the property is not found, the methods\n\t\t// become no-ops.\n\n\t},\n\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t},\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind: function () {\n\n\t\tvar targetObject = this.node,\n\t\t\tparsedPath = this.parsedPath,\n\n\t\t\tobjectName = parsedPath.objectName,\n\t\t\tpropertyName = parsedPath.propertyName,\n\t\t\tpropertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tvar objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( var i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tvar nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tvar nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tvar versioning = this.Versioning.None;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tvar bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphTargets ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t},\n\n\tunbind: function () {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( PropertyBinding.prototype, {\n\n\t// initial state of these methods that calls 'bind'\n\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n} );\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * \t-\tAdd objects you would otherwise pass as 'root' to the\n * \t\tconstructor or the .clipAction method of AnimationMixer.\n *\n * \t-\tInstead pass this object as 'root'.\n *\n * \t-\tYou can also add and remove objects later when the mixer\n * \t\tis running.\n *\n * Note:\n *\n * \tObjects of this class appear as one object to the mixer,\n * \tso cache control of the individual objects must be done\n * \ton the group.\n *\n * Limitation:\n *\n * \t- \tThe animated properties must be compatible among the\n * \t\tall objects in the group.\n *\n * -\tA single property can either be controlled through a\n * \ttarget group or directly, but not both.\n *\n * @author tschw\n */\n\nfunction AnimationObjectGroup() {\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// cached objects followed by the active ones\n\tthis._objects = Array.prototype.slice.call( arguments );\n\n\tthis.nCachedObjects_ = 0;\t\t\t// threshold\n\t// note: read by PropertyBinding.Composite\n\n\tvar indices = {};\n\tthis._indicesByUUID = indices;\t\t// for bookkeeping\n\n\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t}\n\n\tthis._paths = [];\t\t\t\t\t// inside: string\n\tthis._parsedPaths = [];\t\t\t\t// inside: { we don't care, here }\n\tthis._bindings = []; \t\t\t\t// inside: Array< PropertyBinding >\n\tthis._bindingsIndicesByPath = {}; \t// inside: indices in these arrays\n\n\tvar scope = this;\n\n\tthis.stats = {\n\n\t\tobjects: {\n\t\t\tget total() {\n\n\t\t\t\treturn scope._objects.length;\n\n\t\t\t},\n\t\t\tget inUse() {\n\n\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t}\n\t\t},\n\t\tget bindingsPerObject() {\n\n\t\t\treturn scope._bindings.length;\n\n\t\t}\n\n\t};\n\n}\n\nObject.assign( AnimationObjectGroup.prototype, {\n\n\tisAnimationObjectGroup: true,\n\n\tadd: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length,\n\t\t\tknownObject = undefined;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\tremove: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tvar lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// remove & forget\n\tuncache: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tvar lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ],\n\t\t\tbindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tvar paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tvar object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t},\n\n\tunsubscribe_: function ( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * Action provided by AnimationMixer for scheduling clip playback on specific\n * objects.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n *\n */\n\nfunction AnimationAction( mixer, clip, localRoot ) {\n\n\tthis._mixer = mixer;\n\tthis._clip = clip;\n\tthis._localRoot = localRoot || null;\n\n\tvar tracks = clip.tracks,\n\t\tnTracks = tracks.length,\n\t\tinterpolants = new Array( nTracks );\n\n\tvar interpolantSettings = {\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\t};\n\n\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\tvar interpolant = tracks[ i ].createInterpolant( null );\n\t\tinterpolants[ i ] = interpolant;\n\t\tinterpolant.settings = interpolantSettings;\n\n\t}\n\n\tthis._interpolantSettings = interpolantSettings;\n\n\tthis._interpolants = interpolants;\t// bound by the mixer\n\n\t// inside: PropertyMixer (managed by the mixer)\n\tthis._propertyBindings = new Array( nTracks );\n\n\tthis._cacheIndex = null;\t\t\t// for the memory manager\n\tthis._byClipCacheIndex = null;\t\t// for the memory manager\n\n\tthis._timeScaleInterpolant = null;\n\tthis._weightInterpolant = null;\n\n\tthis.loop = LoopRepeat;\n\tthis._loopCount = - 1;\n\n\t// global mixer time when the action is to be started\n\t// it's set back to 'null' upon start of the action\n\tthis._startTime = null;\n\n\t// scaled local time of the action\n\t// gets clamped or wrapped to 0..clip.duration according to loop\n\tthis.time = 0;\n\n\tthis.timeScale = 1;\n\tthis._effectiveTimeScale = 1;\n\n\tthis.weight = 1;\n\tthis._effectiveWeight = 1;\n\n\tthis.repetitions = Infinity; \t\t// no. of repetitions when looping\n\n\tthis.paused = false;\t\t\t\t// true -> zero effective time scale\n\tthis.enabled = true;\t\t\t\t// false -> zero effective weight\n\n\tthis.clampWhenFinished \t= false;\t// keep feeding the last frame?\n\n\tthis.zeroSlopeAtStart \t= true;\t\t// for smooth interpolation w/o separate\n\tthis.zeroSlopeAtEnd\t\t= true;\t\t// clips for start, loop and end\n\n}\n\nObject.assign( AnimationAction.prototype, {\n\n\t// State & Scheduling\n\n\tplay: function () {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t},\n\n\treset: function () {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0;\t\t\t// restart clip\n\t\tthis._loopCount = - 1;\t// forget previous loops\n\t\tthis._startTime = null;\t// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t},\n\n\tisRunning: function () {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t},\n\n\t// return true when play has been called\n\tisScheduled: function () {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t},\n\n\tstartAt: function ( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t},\n\n\tsetLoop: function ( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t},\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight: function ( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t},\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight: function () {\n\n\t\treturn this._effectiveWeight;\n\n\t},\n\n\tfadeIn: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t},\n\n\tfadeOut: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t},\n\n\tcrossFadeFrom: function ( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tvar fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcrossFadeTo: function ( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t},\n\n\tstopFading: function () {\n\n\t\tvar weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale: function ( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale: function () {\n\n\t\treturn this._effectiveTimeScale;\n\n\t},\n\n\tsetDuration: function ( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\tsyncWith: function ( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\thalt: function ( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t},\n\n\twarp: function ( startTimeScale, endTimeScale, duration ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._timeScaleInterpolant,\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t},\n\n\tstopWarping: function () {\n\n\t\tvar timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Object Accessors\n\n\tgetMixer: function () {\n\n\t\treturn this._mixer;\n\n\t},\n\n\tgetClip: function () {\n\n\t\treturn this._clip;\n\n\t},\n\n\tgetRoot: function () {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t},\n\n\t// Interna\n\n\t_update: function ( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tvar timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tvar clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tvar weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tvar interpolants = this._interpolants;\n\t\t\tvar propertyMixers = this._propertyBindings;\n\n\t\t\tfor ( var j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_updateWeight: function ( time ) {\n\n\t\tvar weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tvar interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t},\n\n\t_updateTimeScale: function ( time ) {\n\n\t\tvar timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tvar interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t},\n\n\t_updateTime: function ( deltaTime ) {\n\n\t\tvar time = this.time + deltaTime;\n\n\t\tif ( deltaTime === 0 ) return time;\n\n\t\tvar duration = this._clip.duration,\n\n\t\t\tloop = this.loop,\n\t\t\tloopCount = this._loopCount;\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else break handle_stop;\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tvar pingPong = ( loop === LoopPingPong );\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tvar loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tvar pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tvar atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\tthis.time = time;\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.time = time;\n\t\treturn time;\n\n\t},\n\n\t_setEndings: function ( atStart, atEnd, pingPong ) {\n\n\t\tvar settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart \t= ZeroSlopeEnding;\n\t\t\tsettings.endingEnd\t\t= ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_scheduleFading: function ( duration, weightNow, weightThen ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now; \t\t\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * Player for AnimationClips.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction AnimationMixer( root ) {\n\n\tthis._root = root;\n\tthis._initMemoryManager();\n\tthis._accuIndex = 0;\n\n\tthis.time = 0;\n\n\tthis.timeScale = 1.0;\n\n}\n\nAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: AnimationMixer,\n\n\t_bindAction: function ( action, prototypeAction ) {\n\n\t\tvar root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tvar track = tracks[ i ],\n\t\t\t\ttrackName = track.name,\n\t\t\t\tbinding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t},\n\n\t_activateAction: function ( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tvar rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t},\n\n\t_deactivateAction: function ( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t},\n\n\t// Memory manager\n\n\t_initMemoryManager: function () {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \t\tknownActions: Array< AnimationAction >\t- used as prototypes\n\t\t// \t\tactionByRoot: AnimationAction\t\t\t- lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tvar scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t},\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction: function ( action ) {\n\n\t\tvar index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t},\n\n\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\tvar actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tvar knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t},\n\n\t_removeInactiveAction: function ( action ) {\n\n\t\tvar actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tvar clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tvar actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t},\n\n\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\tvar bindings = action._propertyBindings;\n\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tvar binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_lendAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t},\n\n\t_takeBackAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t},\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tbindings = this._bindings;\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t},\n\n\t_removeInactiveBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tremove_empty_map: {\n\n\t\t\tfor ( var _ in bindingByName ) break remove_empty_map; // eslint-disable-line no-unused-vars\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t},\n\n\t_lendBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t},\n\n\t_takeBackBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t},\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant: function () {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++,\n\t\t\tinterpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t},\n\n\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t},\n\n\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject !== null ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ],\n\t\t\tprototypeAction = null;\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tvar existingAction =\n\t\t\t\t\tactionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tvar newAction = new AnimationAction( this, clipObject, optionalRoot );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t},\n\n\t// get an existing action\n\texistingAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction: function () {\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tthis._nActiveActions = 0;\n\t\tthis._nActiveBindings = 0;\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tactions[ i ].reset();\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].useCount = 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// advance the time and update apply the animation\n\tupdate: function ( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tvar action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tvar bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// return this mixer's root target object\n\tgetRoot: function () {\n\n\t\treturn this._root;\n\n\t},\n\n\t// free all resources specific to a particular clip\n\tuncacheClip: function ( clip ) {\n\n\t\tvar actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tvar actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tvar action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tvar cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t},\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot: function ( root ) {\n\n\t\tvar rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( var clipUuid in actionsByClip ) {\n\n\t\t\tvar actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( var trackName in bindingByName ) {\n\n\t\t\t\tvar binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remove a targeted clip from the cache\n\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\tvar action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Uniform( value ) {\n\n\tif ( typeof value === 'string' ) {\n\n\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\tvalue = arguments[ 1 ];\n\n\t}\n\n\tthis.value = value;\n\n}\n\nUniform.prototype.clone = function () {\n\n\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n};\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferGeometry() {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.maxInstancedCount = undefined;\n\n}\n\nInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\tconstructor: InstancedBufferGeometry,\n\n\tisInstancedBufferGeometry: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\tthis.maxInstancedCount = source.maxInstancedCount;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.data = interleavedBuffer;\n\tthis.itemSize = itemSize;\n\tthis.offset = offset;\n\n\tthis.normalized = normalized === true;\n\n}\n\nObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\tcount: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.count;\n\n\t\t}\n\n\t},\n\n\tarray: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.array;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBuffer( array, stride ) {\n\n\tthis.array = array;\n\tthis.stride = stride;\n\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\n\tisInterleavedBuffer: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.stride : 0;\n\t\tthis.array = array;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( var i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\tInterleavedBuffer.call( this, array, stride );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\tconstructor: InstancedInterleavedBuffer,\n\n\tisInstancedInterleavedBuffer: true,\n\n\tcopy: function ( source ) {\n\n\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferAttribute( array, itemSize, meshPerAttribute ) {\n\n\tBufferAttribute.call( this, array, itemSize );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author bhouston / http://clara.io/\n * @author stephomi / http://stephaneginier.com/\n */\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: {},\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.visible === false ) return;\n\n\tobject.raycast( raycaster, intersects );\n\n\tif ( recursive === true ) {\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tlinePrecision: 1,\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Clock( autoStart ) {\n\n\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\tthis.startTime = 0;\n\tthis.oldTime = 0;\n\tthis.elapsedTime = 0;\n\n\tthis.running = false;\n\n}\n\nObject.assign( Clock.prototype, {\n\n\tstart: function () {\n\n\t\tthis.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t},\n\n\tgetElapsedTime: function () {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t},\n\n\tgetDelta: function () {\n\n\t\tvar diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tvar newTime = ( typeof performance === 'undefined' ? Date : performance ).now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The poles (phi) are at the positive and negative y axis.\n * The equator starts at positive z.\n */\n\nfunction Spherical( radius, phi, theta ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0;\n\tthis.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere\n\n\treturn this;\n\n}\n\nObject.assign( Spherical.prototype, {\n\n\tset: function ( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t},\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe: function () {\n\n\t\tvar EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( vec3 ) {\n\n\t\tthis.radius = vec3.length();\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis\n\t\t\tthis.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n *\n */\n\nfunction Cylindrical( radius, theta, y ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\treturn this;\n\n}\n\nObject.assign( Cylindrical.prototype, {\n\n\tset: function ( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( vec3 ) {\n\n\t\tthis.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z );\n\t\tthis.theta = Math.atan2( vec3.x, vec3.z );\n\t\tthis.y = vec3.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Box2( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n}\n\nObject.assign( Box2.prototype, {\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction VertexNormalsHelper( object, size, hex, linewidth ) {\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length * 3;\n\n\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\tnNormals = objGeometry.attributes.normal.count;\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nVertexNormalsHelper.prototype = Object.create( LineSegments.prototype );\nVertexNormalsHelper.prototype.constructor = VertexNormalsHelper;\n\nVertexNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tvar keys = [ 'a', 'b', 'c' ];\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\tvar faces = objGeometry.faces;\n\n\t\t\tvar idx = 0;\n\n\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar vertex = vertices[ face[ keys[ j ] ] ];\n\n\t\t\t\t\tvar normal = face.vertexNormals[ j ];\n\n\t\t\t\t\tv1.copy( vertex ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\tvar objPos = objGeometry.attributes.position;\n\n\t\t\tvar objNorm = objGeometry.attributes.normal;\n\n\t\t\tvar idx = 0;\n\n\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\tfor ( var j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\tv1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld );\n\n\t\t\t\tv2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) );\n\n\t\t\t\tv2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction SpotLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = [\n\t\t0, 0, 0, \t0, 0, 1,\n\t\t0, 0, 0, \t1, 0, 1,\n\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t0, 0, 0, \t0, 1, 1,\n\t\t0, 0, 0, \t0, - 1, 1\n\t];\n\n\tfor ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\tvar p1 = ( i / l ) * Math.PI * 2;\n\t\tvar p2 = ( j / l ) * Math.PI * 2;\n\n\t\tpositions.push(\n\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t);\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.cone = new LineSegments( geometry, material );\n\tthis.add( this.cone );\n\n\tthis.update();\n\n}\n\nSpotLightHelper.prototype = Object.create( Object3D.prototype );\nSpotLightHelper.prototype.constructor = SpotLightHelper;\n\nSpotLightHelper.prototype.dispose = function () {\n\n\tthis.cone.geometry.dispose();\n\tthis.cone.material.dispose();\n\n};\n\nSpotLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\tvar vector2 = new Vector3();\n\n\treturn function update() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\n\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( vector2.sub( vector ) );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t};\n\n}();\n\n/**\n * @author Sean Griffin / http://twitter.com/sgrif\n * @author Michael Guerrero / http://realitymeltdown.com\n * @author mrdoob / http://mrdoob.com/\n * @author ikerr / http://verold.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction getBoneList( object ) {\n\n\tvar boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( var i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nfunction SkeletonHelper( object ) {\n\n\tvar bones = getBoneList( object );\n\n\tvar geometry = new BufferGeometry();\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar color1 = new Color( 0, 0, 1 );\n\tvar color2 = new Color( 0, 1, 0 );\n\n\tfor ( var i = 0; i < bones.length; i ++ ) {\n\n\t\tvar bone = bones[ i ];\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t}\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.root = object;\n\tthis.bones = bones;\n\n\tthis.matrix = object.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n}\n\nSkeletonHelper.prototype = Object.create( LineSegments.prototype );\nSkeletonHelper.prototype.constructor = SkeletonHelper;\n\nSkeletonHelper.prototype.updateMatrixWorld = function () {\n\n\tvar vector = new Vector3();\n\n\tvar boneMatrix = new Matrix4();\n\tvar matrixWorldInv = new Matrix4();\n\n\treturn function updateMatrixWorld( force ) {\n\n\t\tvar bones = this.bones;\n\n\t\tvar geometry = this.geometry;\n\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\tmatrixWorldInv.getInverse( this.root.matrixWorld );\n\n\t\tfor ( var i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tvar bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j, vector.x, vector.y, vector.z );\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, vector.x, vector.y, vector.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PointLightHelper( light, sphereSize, color ) {\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.color = color;\n\n\tvar geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\tvar material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\n\tMesh.call( this, geometry, material );\n\n\tthis.matrix = this.light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n\n\t/*\n\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tvar d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n}\n\nPointLightHelper.prototype = Object.create( Mesh.prototype );\nPointLightHelper.prototype.constructor = PointLightHelper;\n\nPointLightHelper.prototype.dispose = function () {\n\n\tthis.geometry.dispose();\n\tthis.material.dispose();\n\n};\n\nPointLightHelper.prototype.update = function () {\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.material.color.copy( this.light.color );\n\n\t}\n\n\t/*\n\tvar d = this.light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.visible = true;\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\t*/\n\n};\n\n/**\n * @author abelnation / http://github.com/abelnation\n * @author Mugen87 / http://github.com/Mugen87\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction RectAreaLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) );\n\n\tthis.line = new Line( geometry, material );\n\tthis.add( this.line );\n\n\n\tthis.update();\n\n}\n\nRectAreaLightHelper.prototype = Object.create( Object3D.prototype );\nRectAreaLightHelper.prototype.constructor = RectAreaLightHelper;\n\nRectAreaLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nRectAreaLightHelper.prototype.update = function () {\n\n\t// calculate new dimensions of the helper\n\n\tvar hx = this.light.width * 0.5;\n\tvar hy = this.light.height * 0.5;\n\n\tvar position = this.line.geometry.attributes.position;\n\tvar array = position.array;\n\n\t// update vertices\n\n\tarray[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0;\n\tarray[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0;\n\tarray[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0;\n\tarray[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0;\n\tarray[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0;\n\n\tposition.needsUpdate = true;\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.line.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.line.material.color.copy( this.light.color );\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction HemisphereLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new OctahedronBufferGeometry( size );\n\tgeometry.rotateY( Math.PI * 0.5 );\n\n\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\tif ( this.color === undefined ) this.material.vertexColors = VertexColors;\n\n\tvar position = geometry.getAttribute( 'position' );\n\tvar colors = new Float32Array( position.count * 3 );\n\n\tgeometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\tthis.add( new Mesh( geometry, this.material ) );\n\n\tthis.update();\n\n}\n\nHemisphereLightHelper.prototype = Object.create( Object3D.prototype );\nHemisphereLightHelper.prototype.constructor = HemisphereLightHelper;\n\nHemisphereLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nHemisphereLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\n\tvar color1 = new Color();\n\tvar color2 = new Color();\n\n\treturn function update() {\n\n\t\tvar mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tvar colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\tcolor1.copy( this.light.color );\n\t\t\tcolor2.copy( this.light.groundColor );\n\n\t\t\tfor ( var i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tvar color = ( i < ( l / 2 ) ) ? color1 : color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction GridHelper( size, divisions, color1, color2 ) {\n\n\tsize = size || 10;\n\tdivisions = divisions || 10;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar center = divisions / 2;\n\tvar step = size / divisions;\n\tvar halfSize = size / 2;\n\n\tvar vertices = [], colors = [];\n\n\tfor ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\tvar color = i === center ? color1 : color2;\n\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nGridHelper.prototype = Object.create( LineSegments.prototype );\nGridHelper.prototype.constructor = GridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n * @author Hectate / http://www.github.com/Hectate\n */\n\nfunction PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) {\n\n\tradius = radius || 10;\n\tradials = radials || 16;\n\tcircles = circles || 8;\n\tdivisions = divisions || 64;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar x, z;\n\tvar v, i, j, r, color;\n\n\t// create the radials\n\n\tfor ( i = 0; i <= radials; i ++ ) {\n\n\t\tv = ( i / radials ) * ( Math.PI * 2 );\n\n\t\tx = Math.sin( v ) * radius;\n\t\tz = Math.cos( v ) * radius;\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tvertices.push( x, 0, z );\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tcolors.push( color.r, color.g, color.b );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t}\n\n\t// create the circles\n\n\tfor ( i = 0; i <= circles; i ++ ) {\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tr = radius - ( radius / circles * i );\n\n\t\tfor ( j = 0; j < divisions; j ++ ) {\n\n\t\t\t// first vertex\n\n\t\t\tv = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t// second vertex\n\n\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nPolarGridHelper.prototype = Object.create( LineSegments.prototype );\nPolarGridHelper.prototype.constructor = PolarGridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction FaceNormalsHelper( object, size, hex, linewidth ) {\n\n\t// FaceNormalsHelper only supports THREE.Geometry\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length;\n\n\t} else {\n\n\t\tconsole.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' );\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\tthis.update();\n\n}\n\nFaceNormalsHelper.prototype = Object.create( LineSegments.prototype );\nFaceNormalsHelper.prototype.constructor = FaceNormalsHelper;\n\nFaceNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tvar vertices = objGeometry.vertices;\n\n\t\tvar faces = objGeometry.faces;\n\n\t\tvar idx = 0;\n\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar normal = face.normal;\n\n\t\t\tv1.copy( vertices[ face.a ] )\n\t\t\t\t.add( vertices[ face.b ] )\n\t\t\t\t.add( vertices[ face.c ] )\n\t\t\t\t.divideScalar( 3 )\n\t\t\t\t.applyMatrix4( matrixWorld );\n\n\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction DirectionalLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tif ( size === undefined ) size = 1;\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [\n\t\t- size, size, 0,\n\t\tsize, size, 0,\n\t\tsize, - size, 0,\n\t\t- size, - size, 0,\n\t\t- size, size, 0\n\t], 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.lightPlane = new Line( geometry, material );\n\tthis.add( this.lightPlane );\n\n\tgeometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\tthis.targetLine = new Line( geometry, material );\n\tthis.add( this.targetLine );\n\n\tthis.update();\n\n}\n\nDirectionalLightHelper.prototype = Object.create( Object3D.prototype );\nDirectionalLightHelper.prototype.constructor = DirectionalLightHelper;\n\nDirectionalLightHelper.prototype.dispose = function () {\n\n\tthis.lightPlane.geometry.dispose();\n\tthis.lightPlane.material.dispose();\n\tthis.targetLine.geometry.dispose();\n\tthis.targetLine.material.dispose();\n\n};\n\nDirectionalLightHelper.prototype.update = function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar v3 = new Vector3();\n\n\treturn function update() {\n\n\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\n\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\tv3.subVectors( v2, v1 );\n\n\t\tthis.lightPlane.lookAt( v3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( v3 );\n\t\tthis.targetLine.scale.z = v3.length();\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author Mugen87 / https://github.com/Mugen87\n *\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nfunction CameraHelper( camera ) {\n\n\tvar geometry = new BufferGeometry();\n\tvar material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar pointMap = {};\n\n\t// colors\n\n\tvar colorFrustum = new Color( 0xffaa00 );\n\tvar colorCone = new Color( 0xff0000 );\n\tvar colorUp = new Color( 0x00aaff );\n\tvar colorTarget = new Color( 0xffffff );\n\tvar colorCross = new Color( 0x333333 );\n\n\t// near\n\n\taddLine( 'n1', 'n2', colorFrustum );\n\taddLine( 'n2', 'n4', colorFrustum );\n\taddLine( 'n4', 'n3', colorFrustum );\n\taddLine( 'n3', 'n1', colorFrustum );\n\n\t// far\n\n\taddLine( 'f1', 'f2', colorFrustum );\n\taddLine( 'f2', 'f4', colorFrustum );\n\taddLine( 'f4', 'f3', colorFrustum );\n\taddLine( 'f3', 'f1', colorFrustum );\n\n\t// sides\n\n\taddLine( 'n1', 'f1', colorFrustum );\n\taddLine( 'n2', 'f2', colorFrustum );\n\taddLine( 'n3', 'f3', colorFrustum );\n\taddLine( 'n4', 'f4', colorFrustum );\n\n\t// cone\n\n\taddLine( 'p', 'n1', colorCone );\n\taddLine( 'p', 'n2', colorCone );\n\taddLine( 'p', 'n3', colorCone );\n\taddLine( 'p', 'n4', colorCone );\n\n\t// up\n\n\taddLine( 'u1', 'u2', colorUp );\n\taddLine( 'u2', 'u3', colorUp );\n\taddLine( 'u3', 'u1', colorUp );\n\n\t// target\n\n\taddLine( 'c', 't', colorTarget );\n\taddLine( 'p', 'c', colorCross );\n\n\t// cross\n\n\taddLine( 'cn1', 'cn2', colorCross );\n\taddLine( 'cn3', 'cn4', colorCross );\n\n\taddLine( 'cf1', 'cf2', colorCross );\n\taddLine( 'cf3', 'cf4', colorCross );\n\n\tfunction addLine( a, b, color ) {\n\n\t\taddPoint( a, color );\n\t\taddPoint( b, color );\n\n\t}\n\n\tfunction addPoint( id, color ) {\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\tpointMap[ id ] = [];\n\n\t\t}\n\n\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.camera = camera;\n\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\tthis.matrix = camera.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.pointMap = pointMap;\n\n\tthis.update();\n\n}\n\nCameraHelper.prototype = Object.create( LineSegments.prototype );\nCameraHelper.prototype.constructor = CameraHelper;\n\nCameraHelper.prototype.update = function () {\n\n\tvar geometry, pointMap;\n\n\tvar vector = new Vector3();\n\tvar camera = new Camera();\n\n\tfunction setPoint( point, x, y, z ) {\n\n\t\tvector.set( x, y, z ).unproject( camera );\n\n\t\tvar points = pointMap[ point ];\n\n\t\tif ( points !== undefined ) {\n\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tposition.setXYZ( points[ i ], vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn function update() {\n\n\t\tgeometry = this.geometry;\n\t\tpointMap = this.pointMap;\n\n\t\tvar w = 1, h = 1;\n\n\t\t// we need just camera projection matrix\n\t\t// world matrix must be identity\n\n\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', 0, 0, - 1 );\n\t\tsetPoint( 't', 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', - w, - h, - 1 );\n\t\tsetPoint( 'n2', w, - h, - 1 );\n\t\tsetPoint( 'n3', - w, h, - 1 );\n\t\tsetPoint( 'n4', w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', - w, - h, 1 );\n\t\tsetPoint( 'f2', w, - h, 1 );\n\t\tsetPoint( 'f3', - w, h, 1 );\n\t\tsetPoint( 'f4', w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', - w, 0, 1 );\n\t\tsetPoint( 'cf2', w, 0, 1 );\n\t\tsetPoint( 'cf3', 0, - h, 1 );\n\t\tsetPoint( 'cf4', 0, h, 1 );\n\n\t\tsetPoint( 'cn1', - w, 0, - 1 );\n\t\tsetPoint( 'cn2', w, 0, - 1 );\n\t\tsetPoint( 'cn3', 0, - h, - 1 );\n\t\tsetPoint( 'cn4', 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n */\n\nfunction BoxHelper( object, color ) {\n\n\tthis.object = object;\n\n\tif ( color === undefined ) color = 0xffff00;\n\n\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\tvar positions = new Float32Array( 8 * 3 );\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\tgeometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nBoxHelper.prototype = Object.create( LineSegments.prototype );\nBoxHelper.prototype.constructor = BoxHelper;\n\nBoxHelper.prototype.update = ( function () {\n\n\tvar box = new Box3();\n\n\treturn function update( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\tbox.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tvar min = box.min;\n\t\tvar max = box.max;\n\n\t\t/*\n\t\t 5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tvar position = this.geometry.attributes.position;\n\t\tvar array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t};\n\n} )();\n\nBoxHelper.prototype.setFromObject = function ( object ) {\n\n\tthis.object = object;\n\tthis.update();\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3Helper( box, hex ) {\n\n\tthis.type = 'Box3Helper';\n\n\tthis.box = box;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\tvar positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.geometry.computeBoundingSphere();\n\n}\n\nBox3Helper.prototype = Object.create( LineSegments.prototype );\nBox3Helper.prototype.constructor = Box3Helper;\n\nBox3Helper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar box = this.box;\n\n\tif ( box.isEmpty() ) return;\n\n\tbox.getCenter( this.position );\n\n\tbox.getSize( this.scale );\n\n\tthis.scale.multiplyScalar( 0.5 );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction PlaneHelper( plane, size, hex ) {\n\n\tthis.type = 'PlaneHelper';\n\n\tthis.plane = plane;\n\n\tthis.size = ( size === undefined ) ? 1 : size;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\tgeometry.computeBoundingSphere();\n\n\tLine.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t//\n\n\tvar positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\tvar geometry2 = new BufferGeometry();\n\tgeometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\tgeometry2.computeBoundingSphere();\n\n\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) );\n\n}\n\nPlaneHelper.prototype = Object.create( Line.prototype );\nPlaneHelper.prototype.constructor = PlaneHelper;\n\nPlaneHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar scale = - this.plane.constant;\n\n\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\tthis.lookAt( this.plane.normal );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author zz85 / http://github.com/zz85\n * @author bhouston / http://clara.io\n *\n * Creates an arrow for visualizing directions\n *\n * Parameters:\n * dir - Vector3\n * origin - Vector3\n * length - Number\n * color - color in hex value\n * headLength - Number\n * headWidth - Number\n */\n\nvar lineGeometry;\nvar coneGeometry;\n\nfunction ArrowHelper( dir, origin, length, color, headLength, headWidth ) {\n\n\t// dir is assumed to be normalized\n\n\tObject3D.call( this );\n\n\tif ( color === undefined ) color = 0xffff00;\n\tif ( length === undefined ) length = 1;\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tif ( lineGeometry === undefined ) {\n\n\t\tlineGeometry = new BufferGeometry();\n\t\tlineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\tconeGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\tconeGeometry.translate( 0, - 0.5, 0 );\n\n\t}\n\n\tthis.position.copy( origin );\n\n\tthis.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) );\n\tthis.line.matrixAutoUpdate = false;\n\tthis.add( this.line );\n\n\tthis.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) );\n\tthis.cone.matrixAutoUpdate = false;\n\tthis.add( this.cone );\n\n\tthis.setDirection( dir );\n\tthis.setLength( length, headLength, headWidth );\n\n}\n\nArrowHelper.prototype = Object.create( Object3D.prototype );\nArrowHelper.prototype.constructor = ArrowHelper;\n\nArrowHelper.prototype.setDirection = ( function () {\n\n\tvar axis = new Vector3();\n\tvar radians;\n\n\treturn function setDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tradians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\n\n\t\t}\n\n\t};\n\n}() );\n\nArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\n\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tthis.line.scale.set( 1, Math.max( 0, length - headLength ), 1 );\n\tthis.line.updateMatrix();\n\n\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\tthis.cone.position.y = length;\n\tthis.cone.updateMatrix();\n\n};\n\nArrowHelper.prototype.setColor = function ( color ) {\n\n\tthis.line.material.color.copy( color );\n\tthis.cone.material.color.copy( color );\n\n};\n\n/**\n * @author sroucheray / http://sroucheray.org/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AxesHelper( size ) {\n\n\tsize = size || 1;\n\n\tvar vertices = [\n\t\t0, 0, 0,\tsize, 0, 0,\n\t\t0, 0, 0,\t0, size, 0,\n\t\t0, 0, 0,\t0, 0, size\n\t];\n\n\tvar colors = [\n\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t0, 0, 1,\t0, 0.6, 1\n\t];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nAxesHelper.prototype = Object.create( LineSegments.prototype );\nAxesHelper.prototype.constructor = AxesHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n}\n\nvar LineStrip = 0;\n\nvar LinePieces = 1;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials ) {\n\n\tif ( materials === undefined ) materials = [];\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setDynamic( true );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nObject.assign( CurvePath.prototype, {\n\n\tcreatePointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\tvar pts = this.getPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from equidistant sampling along the path\n\n\t\tvar pts = this.getSpacedPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateGeometry: function ( points ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\tvar geometry = new Geometry();\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\n//\n\nObject.assign( Path.prototype, {\n\n\tfromPoints: function ( points ) {\n\n\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\tthis.setFromPoints( points );\n\n\t}\n\n} );\n\n//\n\nfunction ClosedSplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\tthis.closed = true;\n\n}\n\nClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction SplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction Spline( points ) {\n\n\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\nObject.assign( Spline.prototype, {\n\n\tinitFromArray: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t},\n\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t},\n\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nObject.assign( Loader.prototype, {\n\n\textractUrlBase: function ( url ) {\n\n\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t}\n\n} );\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nObject.assign( Box2.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Box3.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nObject.assign( _Math, {\n\n\trandom16: function () {\n\n\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\treturn Math.random();\n\n\t},\n\n\tnearestPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\treturn _Math.floorPowerOfTwo( value );\n\n\t},\n\n\tnextPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\treturn _Math.ceilPowerOfTwo( value );\n\n\t}\n\n} );\n\nObject.assign( Matrix3.prototype, {\n\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\treturn vector.applyMatrix3( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( Matrix4.prototype, {\n\n\textractPosition: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\treturn this.copyPosition( m );\n\n\t},\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tgetPosition: function () {\n\n\t\tvar v1;\n\n\t\treturn function getPosition() {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\t\treturn v1.setFromMatrixColumn( this, 3 );\n\n\t\t};\n\n\t}(),\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\treturn this.makeRotationFromQuaternion( q );\n\n\t},\n\tmultiplyToArray: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector4: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t},\n\trotateAxis: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\tv.transformDirection( this );\n\n\t},\n\tcrossVector: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\ttranslate: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t},\n\trotateX: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t},\n\trotateY: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t},\n\trotateZ: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t},\n\trotateByAxis: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t},\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t}\n\n} );\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\nQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\nObject.assign( Ray.prototype, {\n\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionPlane: function ( plane ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\treturn this.intersectsPlane( plane );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t}\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tarea: function () {\n\n\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\treturn this.getArea();\n\n\t},\n\tbarycoordFromPoint: function ( point, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn this.getBarycoord( point, target );\n\n\t},\n\tmidpoint: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\treturn this.getMidpoint( target );\n\n\t},\n\tnormal: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn this.getNormal( target );\n\n\t},\n\tplane: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\treturn this.getPlane( target );\n\n\t}\n\n} );\n\nObject.assign( Triangle, {\n\n\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t},\n\tnormal: function ( a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t}\n\n} );\n\nObject.assign( Shape.prototype, {\n\n\textractAllPoints: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\treturn this.extractPoints( divisions );\n\n\t},\n\textrude: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\treturn new ExtrudeGeometry( this, options );\n\n\t},\n\tmakeGeometry: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\treturn new ShapeGeometry( this, options );\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector3.prototype, {\n\n\tsetEulerFromRotationMatrix: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t},\n\tsetEulerFromQuaternion: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t},\n\tgetPositionFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\treturn this.setFromMatrixPosition( m );\n\n\t},\n\tgetScaleFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\treturn this.setFromMatrixScale( m );\n\n\t},\n\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t},\n\tapplyProjection: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\treturn this.applyMatrix4( m );\n\n\t},\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector4.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\n//\n\nObject.assign( Geometry.prototype, {\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t}\n\n} );\n\nObject.assign( Object3D.prototype, {\n\n\tgetChildByName: function ( name ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\treturn this.getObjectByName( name );\n\n\t},\n\trenderDepth: function () {\n\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t},\n\ttranslate: function ( distance, axis ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\treturn this.translateOnAxis( axis, distance );\n\n\t},\n\tgetWorldRotation: function () {\n\n\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t}\n\n} );\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( BufferGeometry.prototype, {\n\n\taddIndex: function ( index ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\tthis.setIndex( index );\n\n\t},\n\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\tif ( indexOffset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t}\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\tthis.addGroup( start, count );\n\n\t},\n\tclearDrawCalls: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\tthis.clearGroups();\n\n\t},\n\tcomputeTangents: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeOffsets: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( WebGLRenderer.prototype, {\n\n\tgetCurrentRenderTarget: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\treturn this.getRenderTarget();\n\n\t},\n\n\tgetMaxAnisotropy: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t},\n\n\tgetPrecision: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\treturn this.capabilities.precision;\n\n\t},\n\n\tresetGLState: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\treturn this.state.reset();\n\n\t},\n\n\tsupportsFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t},\n\tsupportsHalfFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t},\n\tsupportsStandardDerivatives: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t},\n\tsupportsCompressedTextureS3TC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t},\n\tsupportsCompressedTexturePVRTC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t},\n\tsupportsBlendMinMax: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t},\n\tsupportsVertexTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\treturn this.capabilities.vertexTextures;\n\n\t},\n\tsupportsInstancedArrays: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t},\n\tenableScissorTest: function ( boolean ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\tthis.setScissorTest( boolean );\n\n\t},\n\tinitMaterial: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t},\n\taddPrePlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t},\n\taddPostPlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t},\n\tupdateShadowMap: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t},\n\tsetFaceCulling: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebVRManager.prototype, {\n\n\tstanding: {\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebVRManager: .standing has been removed.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nAudio.prototype.load = function ( file ) {\n\n\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\tvar scope = this;\n\tvar audioLoader = new AudioLoader();\n\taudioLoader.load( file, function ( buffer ) {\n\n\t\tscope.setBuffer( buffer );\n\n\t} );\n\treturn this;\n\n};\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\n//\n\nvar GeometryUtils = {\n\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\tvar matrix;\n\n\t\tif ( geometry2.isMesh ) {\n\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\tmatrix = geometry2.matrix;\n\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t}\n\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t},\n\n\tcenter: function ( geometry ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\treturn geometry.center();\n\n\t}\n\n};\n\nvar ImageUtils = {\n\n\tcrossOrigin: undefined,\n\n\tloadTexture: function ( url, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\t\tvar loader = new TextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( url, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadTextureCube: function ( urls, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\t\tvar loader = new CubeTextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( urls, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadCompressedTexture: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n\t},\n\n\tloadCompressedTextureCube: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n\t}\n\n};\n\n//\n\nfunction Projector() {\n\n\tconsole.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' );\n\n\tthis.projectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\n\t\tvector.project( camera );\n\n\t};\n\n\tthis.unprojectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\n\t\tvector.unproject( camera );\n\n\t};\n\n\tthis.pickingRay = function () {\n\n\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\n\n\t};\n\n}\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' );\n\n\tthis.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tthis.clear = function () {};\n\tthis.render = function () {};\n\tthis.setClearColor = function () {};\n\tthis.setSize = function () {};\n\n}\n\n//\n\nvar SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js' );\n\n}\n\nexport { WebGLRenderTargetCube, WebGLRenderTarget, WebGLRenderer, ShaderLib, UniformsLib, UniformsUtils, ShaderChunk, FogExp2, Fog, Scene, Sprite, LOD, SkinnedMesh, Skeleton, Bone, Mesh, LineSegments, LineLoop, Line, Points, Group, VideoTexture, DataTexture, CompressedTexture, CubeTexture, CanvasTexture, DepthTexture, Texture, CompressedTextureLoader, DataTextureLoader, CubeTextureLoader, TextureLoader, ObjectLoader, MaterialLoader, BufferGeometryLoader, DefaultLoadingManager, LoadingManager, JSONLoader, ImageLoader, ImageBitmapLoader, FontLoader, FileLoader, Loader, LoaderUtils, Cache, AudioLoader, SpotLightShadow, SpotLight, PointLight, RectAreaLight, HemisphereLight, DirectionalLightShadow, DirectionalLight, AmbientLight, LightShadow, Light, StereoCamera, PerspectiveCamera, OrthographicCamera, CubeCamera, ArrayCamera, Camera, AudioListener, PositionalAudio, AudioContext, AudioAnalyser, Audio, VectorKeyframeTrack, StringKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack, ColorKeyframeTrack, BooleanKeyframeTrack, PropertyMixer, PropertyBinding, KeyframeTrack, AnimationUtils, AnimationObjectGroup, AnimationMixer, AnimationClip, Uniform, InstancedBufferGeometry, BufferGeometry, Geometry, InterleavedBufferAttribute, InstancedInterleavedBuffer, InterleavedBuffer, InstancedBufferAttribute, Face3, Object3D, Raycaster, Layers, EventDispatcher, Clock, QuaternionLinearInterpolant, LinearInterpolant, DiscreteInterpolant, CubicInterpolant, Interpolant, Triangle, _Math as Math, Spherical, Cylindrical, Plane, Frustum, Sphere, Ray, Matrix4, Matrix3, Box3, Box2, Line3, Euler, Vector4, Vector3, Vector2, Quaternion, Color, ImmediateRenderObject, VertexNormalsHelper, SpotLightHelper, SkeletonHelper, PointLightHelper, RectAreaLightHelper, HemisphereLightHelper, GridHelper, PolarGridHelper, FaceNormalsHelper, DirectionalLightHelper, CameraHelper, BoxHelper, Box3Helper, PlaneHelper, ArrowHelper, AxesHelper, Shape, Path, ShapePath, Font, CurvePath, Curve, ShapeUtils, WebGLUtils, WireframeGeometry, ParametricGeometry, ParametricBufferGeometry, TetrahedronGeometry, TetrahedronBufferGeometry, OctahedronGeometry, OctahedronBufferGeometry, IcosahedronGeometry, IcosahedronBufferGeometry, DodecahedronGeometry, DodecahedronBufferGeometry, PolyhedronGeometry, PolyhedronBufferGeometry, TubeGeometry, TubeBufferGeometry, TorusKnotGeometry, TorusKnotBufferGeometry, TorusGeometry, TorusBufferGeometry, TextGeometry, TextBufferGeometry, SphereGeometry, SphereBufferGeometry, RingGeometry, RingBufferGeometry, PlaneGeometry, PlaneBufferGeometry, LatheGeometry, LatheBufferGeometry, ShapeGeometry, ShapeBufferGeometry, ExtrudeGeometry, ExtrudeBufferGeometry, EdgesGeometry, ConeGeometry, ConeBufferGeometry, CylinderGeometry, CylinderBufferGeometry, CircleGeometry, CircleBufferGeometry, BoxGeometry, BoxBufferGeometry, ShadowMaterial, SpriteMaterial, RawShaderMaterial, ShaderMaterial, PointsMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshPhongMaterial, MeshToonMaterial, MeshNormalMaterial, MeshLambertMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshBasicMaterial, LineDashedMaterial, LineBasicMaterial, Material, Float64BufferAttribute, Float32BufferAttribute, Uint32BufferAttribute, Int32BufferAttribute, Uint16BufferAttribute, Int16BufferAttribute, Uint8ClampedBufferAttribute, Uint8BufferAttribute, Int8BufferAttribute, BufferAttribute, ArcCurve, CatmullRomCurve3, CubicBezierCurve, CubicBezierCurve3, EllipseCurve, LineCurve, LineCurve3, QuadraticBezierCurve, QuadraticBezierCurve3, SplineCurve, REVISION, MOUSE, CullFaceNone, CullFaceBack, CullFaceFront, CullFaceFrontBack, FrontFaceDirectionCW, FrontFaceDirectionCCW, BasicShadowMap, PCFShadowMap, PCFSoftShadowMap, FrontSide, BackSide, DoubleSide, FlatShading, SmoothShading, NoColors, FaceColors, VertexColors, NoBlending, NormalBlending, AdditiveBlending, SubtractiveBlending, MultiplyBlending, CustomBlending, AddEquation, SubtractEquation, ReverseSubtractEquation, MinEquation, MaxEquation, ZeroFactor, OneFactor, SrcColorFactor, OneMinusSrcColorFactor, SrcAlphaFactor, OneMinusSrcAlphaFactor, DstAlphaFactor, OneMinusDstAlphaFactor, DstColorFactor, OneMinusDstColorFactor, SrcAlphaSaturateFactor, NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth, MultiplyOperation, MixOperation, AddOperation, NoToneMapping, LinearToneMapping, ReinhardToneMapping, Uncharted2ToneMapping, CineonToneMapping, UVMapping, CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping, SphericalReflectionMapping, CubeUVReflectionMapping, CubeUVRefractionMapping, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, NearestFilter, NearestMipMapNearestFilter, NearestMipMapLinearFilter, LinearFilter, LinearMipMapNearestFilter, LinearMipMapLinearFilter, UnsignedByteType, ByteType, ShortType, UnsignedShortType, IntType, UnsignedIntType, FloatType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedInt248Type, AlphaFormat, RGBFormat, RGBAFormat, LuminanceFormat, LuminanceAlphaFormat, RGBEFormat, DepthFormat, DepthStencilFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, LoopOnce, LoopRepeat, LoopPingPong, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, ZeroCurvatureEnding, ZeroSlopeEnding, WrapAroundEnding, TrianglesDrawMode, TriangleStripDrawMode, TriangleFanDrawMode, LinearEncoding, sRGBEncoding, GammaEncoding, RGBEEncoding, LogLuvEncoding, RGBM7Encoding, RGBM16Encoding, RGBDEncoding, BasicDepthPacking, RGBADepthPacking, BoxGeometry as CubeGeometry, Face4, LineStrip, LinePieces, MeshFaceMaterial, MultiMaterial, PointCloud, Particle, ParticleSystem, PointCloudMaterial, ParticleBasicMaterial, ParticleSystemMaterial, Vertex, DynamicBufferAttribute, Int8Attribute, Uint8Attribute, Uint8ClampedAttribute, Int16Attribute, Uint16Attribute, Int32Attribute, Uint32Attribute, Float32Attribute, Float64Attribute, ClosedSplineCurve3, SplineCurve3, Spline, AxisHelper, BoundingBoxHelper, EdgesHelper, WireframeHelper, XHRLoader, BinaryTextureLoader, GeometryUtils, ImageUtils, Projector, CanvasRenderer, SceneUtils, LensFlare };\n","/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nrequire(\"../css/bqplot.css\");\nmodule.exports = require('./index');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtY2xhc3NpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC1jbGFzc2ljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUM3QixNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyJ9","\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!./bqplot.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!./bqplot.css\", function() {\n\t\tvar newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!./bqplot.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Copyright 2015 Bloomberg Finance L.P.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n:root {\\n --bq-content-font-color: var(--jp-content-font-color1);\\n --bq-plotarea-background-fill: var(--jp-layout-color1);\\n --bq-background: var(--jp-layout-color0);\\n --bq-axislabel-font: 14px sans-serif;\\n --bq-axis-rect-opacity: 1;\\n --bq-axis-tick-stroke-width: 1;\\n --bq-axis-tick-opacity: 1;\\n --bq-axis-tick-text-font: 12px sans-serif;\\n --bq-mark-tooltip-border-radius: 5px;\\n --bq-mark-tooltip--webkit-user-select: none;\\n --bq-mark-tooltip--moz-user-select: none;\\n --bq-mainheading-font: 16px sans-serif;\\n --bq-mainheading-font-size: large;\\n --bq-world-map-path-stroke-width: 0.25px;\\n --bq-pie-polyline-stroke-width: 1px;\\n --bq-pie-polyline-fill: none;\\n --bq-network-node-element-stroke: #000;\\n --bq-network-node-element-stroke-width: 1.5px;\\n --bq-network-link-fill: none;\\n --bq-network-link-stroke: #666;\\n --bq-network-link-stroke-width: 1.5px;\\n --bq-network-node-label-pointer-events: none;\\n --bq-network-node-label-font: 12px sans-serif;\\n --bq-selector-fill: var(--jp-border-color1);\\n --bq-mark-tooltip-border: 2px solid var(--jp-border-color0);\\n --bq-mark-tooltip-box-shadow: 1px 1px 2px rgba(245, 245, 245, 0.8);\\n --bq-mark-tooltip-background-color: var(--jp-layout-color0);\\n --bq-mark-tooltip-td-border: 1px solid var(--jp-border-color1);\\n --bq-world-map-path-stroke: black;\\n --bq-world-map-path-fill: seagreen;\\n --bq-pie-polyline-opacity: 0.3;\\n --bq-pie-polyline-stroke: var(--bq-content-font-color);\\n --bq-network-node-element-fill: #666;\\n --bq-network-node-label-text-shadow: 0 1px 0 #000, 1px 0 0 #000, 0 -1px 0 #000, -1px 0 0 #000;\\n --bq-linkarrow-fill: #ccc;\\n}\\n/* Ideally this should be in :root */\\n.gg {\\n --bq-axis-lines-color: var(--jp-layout-color1);\\n --bq-plotarea-background-fill: var(--jp-layout-color2);\\n --bq-tick-color: var(--bq-axis-lines-color);\\n --bq-axis-tick-text-fill: var(--jp-content-font-color2);\\n --bq-axis-rect-stroke: var(--bq-tick-color);\\n --bq-axis-path-stroke: var(--bq-tick-color);\\n --bq-axis-tick-stroke: var(--bq-tick-color);\\n --bq-axis-tick-short-stroke: var(--bq-tick-color);\\n --bq-mainheading-fill: var(--bq-content-font-color);\\n --bq-axislabel-fill: var(--bq-content-font-color);\\n --bq-stick-stroke: var(--bq-content-font-color);\\n --bq-stick-fill: var(--bq-content-font-color);\\n --bq-sticktext-fill: var(--bq-content-font-color);\\n --bq-default-stroke: var(--bq-content-font-color);\\n}\\n.classic {\\n --bq-axis-lines-color: var(--jp-ui-font-color3);\\n --bq-tick-color: var(--bq-axis-lines-color);\\n --bq-axis-tick-text-fill: var(--jp-ui-font-color2);\\n --bq-axis-rect-stroke: var(--bq-tick-color);\\n --bq-axis-path-stroke: var(--bq-tick-color);\\n --bq-axis-tick-stroke: var(--bq-tick-color);\\n --bq-axis-tick-short-stroke: var(--bq-tick-color);\\n --bq-mainheading-fill: var(--bq-content-font-color);\\n --bq-axislabel-fill: var(--bq-content-font-color);\\n --bq-stick-stroke: var(--bq-content-font-color);\\n --bq-stick-fill: var(--bq-content-font-color);\\n --bq-sticktext-fill: var(--bq-content-font-color);\\n --bq-default-stroke: var(--bq-content-font-color);\\n}\\n.bbg,\\n[data-theme-light=\\\"false\\\"] {\\n --bq-content-font-color: orange;\\n --bq-axis-rect-stroke: var(--bq-tick-color);\\n --bq-axis-path-stroke: var(--bq-tick-color);\\n --bq-axis-tick-stroke: var(--bq-tick-color);\\n --bq-axis-tick-short-stroke: var(--bq-tick-color);\\n --bq-mainheading-fill: var(--bq-content-font-color);\\n --bq-axislabel-fill: var(--bq-content-font-color);\\n --bq-stick-stroke: var(--bq-content-font-color);\\n --bq-stick-fill: var(--bq-content-font-color);\\n --bq-sticktext-fill: var(--bq-content-font-color);\\n --bq-default-stroke: var(--bq-content-font-color);\\n}\\n.bqplot {\\n box-sizing: border-box;\\n display: flex;\\n width: auto;\\n height: 480px;\\n}\\n.bqplot > .svg-background {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n z-index: 0;\\n}\\n.bqplot > canvas {\\n position: absolute;\\n pointer-events: none;\\n z-index: 0;\\n}\\n.bqplot > svg {\\n z-index: 0;\\n font: 11px sans-serif;\\n user-select: none;\\n -ms-user-select: none;\\n -khtml-user-select: none;\\n -webkit-user-select: none;\\n flex-grow: 1;\\n}\\n.bqplot > svg .svg-figure {\\n background: var(--bq-background);\\n}\\n.bqplot > svg .axis rect {\\n stroke: var(--bq-axis-rect-stroke);\\n opacity: var(--bq-axis-rect-opacity);\\n}\\n.bqplot > svg .axis .tick line {\\n stroke: var(--bq-axis-tick-stroke);\\n stroke-width: var(--bq-axis-tick-stroke-width);\\n opacity: var(--bq-axis-tick-opacity);\\n}\\n.bqplot > svg .axis .tick.short line {\\n stroke: var(--bq-axis-tick-short-stroke);\\n}\\n.bqplot > svg .axis .tick text {\\n fill: var(--bq-axis-tick-text-fill);\\n font: var(--bq-axis-tick-text-font);\\n}\\n.bqplot > svg .axis line {\\n shape-rendering: crispEdges;\\n font: 10px sans-serif;\\n stroke-width: 1px;\\n}\\n.bqplot > svg .axis path,\\n.bqplot > svg .axis line {\\n fill: none;\\n}\\n.bqplot > svg .axis path {\\n stroke: var(--bq-axis-path-stroke);\\n}\\n.bqplot > svg .axis text.axislabel,\\n.bqplot > svg .axis tspan.axislabel {\\n text-anchor: end;\\n fill: var(--bq-axislabel-fill);\\n font: var(--bq-axislabel-font);\\n}\\n.bqplot > svg .axis .tick text {\\n cursor: default;\\n}\\n.bqplot > svg .axis.axisbold path {\\n stroke-width: 3px;\\n}\\n.bqplot > svg .axis.axisbold text,\\n.bqplot > svg .axis.axisbold text.axislabel {\\n font-weight: bolder;\\n}\\n.bqplot > svg .stick,\\n.bqplot > svg .zeroLine {\\n stroke: var(--bq-stick-stroke);\\n fill: var(--bq-stick-fill);\\n}\\n.bqplot > svg .sticktext {\\n fill: var(--bq-sticktext-fill);\\n}\\n.bqplot > svg .bargroup rect,\\n.bqplot > svg .boxplot rect,\\n.bqplot > svg .slice rect,\\n.bqplot > svg .bargroup path,\\n.bqplot > svg .boxplot path,\\n.bqplot > svg .slice path,\\n.bqplot > svg .bargroup line,\\n.bqplot > svg .boxplot line,\\n.bqplot > svg .slice line {\\n stroke: var(--bq-default-stroke);\\n}\\n.bqplot > svg .zeroLine {\\n shape-rendering: crispEdges;\\n}\\n.bqplot > svg text.mainheading {\\n text-anchor: middle;\\n fill: var(--bq-mainheading-fill);\\n font: var(--bq-mainheading-font);\\n font-size: var(--bq-mainheading-font-size);\\n}\\n.bqplot > svg text.legendtext {\\n text-anchor: start;\\n font: 14px sans-serif;\\n}\\n.bqplot > svg text.dot_text {\\n fill: var(--bq-content-font-color);\\n}\\n.bqplot > svg .indsel {\\n stroke: red;\\n}\\n.bqplot > svg .brushintsel .selection {\\n fill: var(--bq-selector-fill);\\n stroke: none;\\n}\\n.bqplot > svg .intsel {\\n fill: var(--bq-selector-fill);\\n stroke: none;\\n fill-opacity: 0.3;\\n}\\n.bqplot > svg .intselmouse {\\n visibility: hidden;\\n pointer-events: all;\\n /*none?*/\\n}\\n.bqplot > svg .multiselector .active {\\n pointer-events: all;\\n}\\n.bqplot > svg .multiselector .active .selection {\\n stroke: green;\\n}\\n.bqplot > svg .multiselector .active .overlay {\\n pointer-events: all;\\n}\\n.bqplot > svg .multiselector .inactive {\\n pointer-events: none;\\n}\\n.bqplot > svg .multiselector .inactive .selection {\\n stroke: red;\\n}\\n.bqplot > svg .multiselector .inactive .overlay {\\n pointer-events: none;\\n}\\n.bqplot > svg .multiselector .visible {\\n pointer-events: all;\\n}\\n.bqplot > svg .multiselector .visible .selection {\\n stroke: red;\\n}\\n.bqplot > svg .multiselector .visible .overlay {\\n pointer-events: none;\\n}\\n.bqplot > svg .lassoselector .selected {\\n opacity: 0.3;\\n}\\n.bqplot > svg .lassoselector path {\\n fill: none;\\n stroke: orange;\\n stroke-width: 4;\\n}\\n.bqplot > svg .plotarea_background {\\n fill: var(--bq-plotarea-background-fill);\\n}\\n.bqplot > svg .plotarea_events {\\n opacity: 0;\\n}\\n.tooltip_div {\\n z-index: 1001;\\n}\\n.mark_tooltip {\\n pointer-events: none;\\n z-index: 1001;\\n border: var(--bq-mark-tooltip-border);\\n border-radius: var(--bq-mark-tooltip-border-radius);\\n box-shadow: var(--bq-mark-tooltip-box-shadow);\\n -webkit-user-select: var(--bq-mark-tooltip--webkit-user-select);\\n -moz-user-select: var(--bq-mark-tooltip--moz-user-select);\\n background-color: var(--bq-mark-tooltip-background-color);\\n}\\n.mark_tooltip > .bqplot.figure {\\n width: 427px;\\n height: 320px;\\n}\\n.mark_tooltip td {\\n border: var(--bq-mark-tooltip-td-border);\\n}\\n.mark_tooltip table {\\n border-radius: 5px;\\n background: var(--bq-mark-tooltip-background);\\n}\\n.mark_tooltip .tooltiptext {\\n text-align: center;\\n padding: 0.5em;\\n}\\n.world_map path {\\n stroke: var(--bq-world-map-path-stroke);\\n stroke-width: var(--bq-world-map-path-stroke-width);\\n fill: var(--bq-world-map-path-fill);\\n}\\n.world_map .hovered {\\n fill: Orange;\\n stroke: Orange;\\n stroke-width: 2.5px;\\n}\\n.world_map #container {\\n margin: 10px 10%;\\n border: 2px solid #000;\\n border-radius: 5px;\\n height: 100%;\\n overflow: hidden;\\n background: #F0F8FF;\\n}\\n.world_map .graticule {\\n fill: none;\\n stroke: #bbb;\\n stroke-width: 0.5px;\\n stroke-opacity: 0.5;\\n}\\n.g_legend {\\n fill: none;\\n}\\n.pie polyline {\\n opacity: var(--bq-pie-polyline-opacity);\\n stroke: var(--bq-pie-polyline-stroke);\\n stroke-width: var(--bq-pie-polyline-stroke-width);\\n fill: var(--bq-pie-polyline-fill);\\n}\\n.network .node .element {\\n fill: var(--bq-network-node-element-fill);\\n stroke: var(--bq-network-node-element-stroke);\\n stroke-width: var(--bq-network-node-element-stroke-width);\\n}\\n.network .link {\\n fill: var(--bq-network-link-fill);\\n stroke: var(--bq-network-link-stroke);\\n stroke-width: var(--bq-network-link-stroke-width);\\n}\\n.network .node .label {\\n font: var(--bq-network-node-label-font);\\n pointer-events: var(--bq-network-node-label-pointer-events);\\n text-shadow: var(--bq-network-node-label-text-shadow);\\n}\\n.linkarrow {\\n fill: var(--bq-linkarrow-fill);\\n}\\n\", \"\"]);\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \"{\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = modules[_i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = \"(\".concat(item[2], \") and (\").concat(mediaQuery, \")\");\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot).concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertAt.before, target);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\n\tif(options.attrs.nonce === undefined) {\n\t\tvar nonce = getNonce();\n\t\tif (nonce) {\n\t\t\toptions.attrs.nonce = nonce;\n\t\t}\n\t}\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction getNonce() {\n\tif (typeof __webpack_nonce__ === 'undefined') {\n\t\treturn null;\n\t}\n\n\treturn __webpack_nonce__;\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = typeof options.transform === 'function'\n\t\t ? options.transform(obj.css) \n\t\t : options.transform.default(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./Axis\"));\n__export(require(\"./GridHeatMapModel\"));\n__export(require(\"./Mark\"));\n__export(require(\"./AxisModel\"));\n__export(require(\"./HandDraw\"));\n__export(require(\"./MarkModel\"));\n__export(require(\"./Bars\"));\n__export(require(\"./HandDrawModel\"));\n__export(require(\"./OHLC\"));\n__export(require(\"./BarsModel\"));\n__export(require(\"./Hist\"));\n__export(require(\"./OHLCModel\"));\n__export(require(\"./HistModel\"));\n__export(require(\"./SelectorModel\"));\n__export(require(\"./Boxplot\"));\n__export(require(\"./IndexSelector\"));\n__export(require(\"./OrdinalColorScale\"));\n__export(require(\"./BoxplotModel\"));\n__export(require(\"./Interaction\"));\n__export(require(\"./OrdinalScale\"));\n__export(require(\"./Label\"));\n__export(require(\"./LabelModel\"));\n__export(require(\"./OrdinalScaleModel\"));\n__export(require(\"./OrdinalColorScaleModel\"));\n__export(require(\"./BrushSelector\"));\n__export(require(\"./LassoSelector\"));\n__export(require(\"./PanZoom\"));\n__export(require(\"./ColorAxis\"));\n__export(require(\"./lasso_test\"));\n__export(require(\"./PanZoomModel\"));\n__export(require(\"./colorbrewer\"));\n__export(require(\"./ColorScale\"));\n__export(require(\"./Pie\"));\n__export(require(\"./ColorUtils\"));\n__export(require(\"./ColorScaleModel\"));\n__export(require(\"./PieModel\"));\n__export(require(\"./DateColorScale\"));\n__export(require(\"./LinearScale\"));\n__export(require(\"./Scale\"));\n__export(require(\"./DateColorScaleModel\"));\n__export(require(\"./LinearScaleModel\"));\n__export(require(\"./ScaleModel\"));\n__export(require(\"./DateScale\"));\n__export(require(\"./Lines\"));\n__export(require(\"./Scatter\"));\n__export(require(\"./DateScaleModel\"));\n__export(require(\"./LinesModel\"));\n__export(require(\"./ScatterModel\"));\n__export(require(\"./FastIntervalSelector\"));\n__export(require(\"./LogScale\"));\n__export(require(\"./Selector\"));\n__export(require(\"./Figure\"));\n__export(require(\"./LogScaleModel\"));\n__export(require(\"./FigureModel\"));\n__export(require(\"./Map\"));\n__export(require(\"./Tooltip\"));\n__export(require(\"./TooltipModel\"));\n__export(require(\"./FlexLine\"));\n__export(require(\"./MapModel\"));\n__export(require(\"./GeoScale\"));\n__export(require(\"./Markers\"));\n__export(require(\"./utils\"));\n__export(require(\"./GeoScaleModel\"));\n__export(require(\"./MarketMap\"));\n__export(require(\"./GridHeatMap\"));\n__export(require(\"./MarketMapModel\"));\n__export(require(\"./HeatMap\"));\n__export(require(\"./HeatMapModel\"));\n__export(require(\"./Toolbar\"));\n__export(require(\"./GraphModel\"));\n__export(require(\"./Graph\"));\n__export(require(\"./Image\"));\n__export(require(\"./ImageModel\"));\n__export(require(\"./ScatterGL\"));\n__export(require(\"./ScatterGLModel\"));\nexports.version = require('../package.json').version;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7O0FBRUgsNEJBQXVCO0FBQ3ZCLHdDQUFtQztBQUNuQyw0QkFBdUI7QUFDdkIsaUNBQTRCO0FBQzVCLGdDQUEyQjtBQUMzQixpQ0FBNEI7QUFDNUIsNEJBQXVCO0FBQ3ZCLHFDQUFnQztBQUNoQyw0QkFBdUI7QUFDdkIsaUNBQTRCO0FBQzVCLDRCQUF1QjtBQUN2QixpQ0FBNEI7QUFDNUIsaUNBQTRCO0FBQzVCLHFDQUFnQztBQUNoQywrQkFBMEI7QUFDMUIscUNBQWdDO0FBQ2hDLHlDQUFvQztBQUNwQyxvQ0FBK0I7QUFDL0IsbUNBQThCO0FBQzlCLG9DQUErQjtBQUMvQiw2QkFBd0I7QUFDeEIsa0NBQTZCO0FBQzdCLHlDQUFvQztBQUNwQyw4Q0FBeUM7QUFDekMscUNBQWdDO0FBQ2hDLHFDQUFnQztBQUNoQywrQkFBMEI7QUFDMUIsaUNBQTRCO0FBQzVCLGtDQUE2QjtBQUM3QixvQ0FBK0I7QUFDL0IsbUNBQThCO0FBQzlCLGtDQUE2QjtBQUM3QiwyQkFBc0I7QUFDdEIsa0NBQTZCO0FBQzdCLHVDQUFrQztBQUNsQyxnQ0FBMkI7QUFDM0Isc0NBQWlDO0FBQ2pDLG1DQUE4QjtBQUM5Qiw2QkFBd0I7QUFDeEIsMkNBQXNDO0FBQ3RDLHdDQUFtQztBQUNuQyxrQ0FBNkI7QUFDN0IsaUNBQTRCO0FBQzVCLDZCQUF3QjtBQUN4QiwrQkFBMEI7QUFDMUIsc0NBQWlDO0FBQ2pDLGtDQUE2QjtBQUM3QixvQ0FBK0I7QUFDL0IsNENBQXVDO0FBQ3ZDLGdDQUEyQjtBQUMzQixnQ0FBMkI7QUFDM0IsOEJBQXlCO0FBQ3pCLHFDQUFnQztBQUNoQyxtQ0FBOEI7QUFDOUIsMkJBQXNCO0FBQ3RCLCtCQUEwQjtBQUMxQixvQ0FBK0I7QUFDL0IsZ0NBQTJCO0FBQzNCLGdDQUEyQjtBQUMzQixnQ0FBMkI7QUFDM0IsK0JBQTBCO0FBQzFCLDZCQUF3QjtBQUN4QixxQ0FBZ0M7QUFDaEMsaUNBQTRCO0FBQzVCLG1DQUE4QjtBQUM5QixzQ0FBaUM7QUFDakMsK0JBQTBCO0FBQzFCLG9DQUErQjtBQUMvQiwrQkFBMEI7QUFDMUIsa0NBQTZCO0FBQzdCLDZCQUF3QjtBQUN4Qiw2QkFBd0I7QUFDeEIsa0NBQTZCO0FBQzdCLGlDQUE0QjtBQUM1QixzQ0FBaUM7QUFFdEIsUUFBQSxPQUFPLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _ = __importStar(require(\"underscore\"));\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass GridHeatMapModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"GridHeatMapModel\", _view_name: \"GridHeatMap\", row: null, column: null, color: null, scales_metadata: {\n row: { orientation: \"vertical\", dimension: \"y\" },\n column: { orientation: \"horizontal\", dimension: \"x\" },\n color: { dimension: \"color\" }\n }, row_align: \"start\", column_align: \"start\", null_color: \"black\", stroke: \"black\", opacity: 1.0, anchor_style: {}, display_format: null, font_style: {} });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"row\", \"column\", \"color\"], this.update_data, this);\n // FIXME: replace this with on(\"change:preserve_domain\"). It is not done here because\n // on_some_change depends on the GLOBAL backbone on(\"change\") handler which\n // is called AFTER the specific handlers on(\"change:foobar\") and we make that\n // assumption.\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.update_data();\n this.update_domains();\n }\n update_data() {\n this.dirty = true;\n // Handling data updates\n this.colors = this.get(\"color\");\n const num_rows = this.colors.length;\n const num_cols = this.colors[0].length;\n this.rows = this.get(\"row\") || _.range(num_rows);\n this.columns = this.get(\"column\") || _.range(num_cols);\n const flat_colors = [].concat.apply([], this.colors.map((x) => Array.prototype.slice.call(x, 0)));\n this.mark_data = flat_colors.map((data, index) => {\n const row_num = Math.floor(index / num_cols);\n const col_num = index % num_cols;\n return {\n row_num: row_num,\n row: this.rows[row_num],\n column: this.columns[col_num],\n column_num: col_num,\n color: data,\n _cell_num: index,\n };\n });\n this.identify_modes();\n this.update_domains();\n this.dirty = false;\n this.trigger(\"data_updated\");\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n const scales = this.get(\"scales\");\n const y_scale = scales.row, x_scale = scales.column;\n const color_scale = scales.color;\n if (!this.get(\"preserve_domain\").row) {\n y_scale.compute_and_set_domain(this.rows, this.model_id + \"_row\");\n }\n else {\n y_scale.del_domain([], this.model_id + \"_row\");\n }\n if (!this.get(\"preserve_domain\").column) {\n x_scale.compute_and_set_domain(this.columns, this.model_id + \"_column\");\n }\n else {\n x_scale.del_domain([], this.model_id + \"_column\");\n }\n if (color_scale !== null && color_scale !== undefined) {\n if (!this.get(\"preserve_domain\").color) {\n color_scale.compute_and_set_domain(this.mark_data.map(function (elem) {\n return elem.color;\n }), this.model_id + \"_color\");\n }\n else {\n color_scale.del_domain([], this.model_id + \"_color\");\n }\n }\n }\n get_data_dict(data, index) {\n return data;\n }\n identify_modes() {\n //based on the data, identify the mode in which the heatmap should\n //be plotted.\n const modes = {};\n const scales = this.get(\"scales\");\n const row_scale = scales.row;\n const column_scale = scales.column;\n const data_nrow = this.colors.length;\n const data_ncol = this.colors[0].length;\n if (row_scale.type === \"ordinal\") {\n modes.row = \"middle\";\n }\n else {\n if (data_nrow === this.rows.length - 1) {\n modes.row = \"boundaries\";\n }\n else if (data_nrow === this.rows.length) {\n modes.row = \"expand_one\";\n }\n else if (data_nrow === this.rows.length + 1) {\n modes.row = \"expand_two\";\n }\n }\n if (column_scale.type === \"ordinal\") {\n modes.column = \"middle\";\n }\n else {\n if (data_ncol === this.columns.length - 1) {\n modes.column = \"boundaries\";\n }\n else if (data_ncol === this.columns.length) {\n modes.column = \"expand_one\";\n }\n else if (data_ncol === this.columns.length + 1) {\n modes.column = \"expand_two\";\n }\n }\n this.modes = modes;\n }\n}\nGridHeatMapModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { row: serialize.array_or_json, column: serialize.array_or_json, color: serialize.array_or_json });\nexports.GridHeatMapModel = GridHeatMapModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JpZEhlYXRNYXBNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9HcmlkSGVhdE1hcE1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCw4Q0FBZ0M7QUFDaEMsMkNBQXdDO0FBQ3hDLHVEQUF5QztBQUV6QyxNQUFhLGdCQUFpQixTQUFRLHFCQUFTO0lBRTNDLFFBQVE7UUFDSix5QkFBVyxxQkFBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFDckMsV0FBVyxFQUFFLGtCQUFrQixFQUMvQixVQUFVLEVBQUUsYUFBYSxFQUN6QixHQUFHLEVBQUUsSUFBSSxFQUNULE1BQU0sRUFBRSxJQUFJLEVBQ1osS0FBSyxFQUFFLElBQUksRUFDWCxlQUFlLEVBQUU7Z0JBQ2IsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNoRCxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JELEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7YUFDaEMsRUFDRCxTQUFTLEVBQUUsT0FBTyxFQUNsQixZQUFZLEVBQUUsT0FBTyxFQUNyQixVQUFVLEVBQUUsT0FBTyxFQUNuQixNQUFNLEVBQUUsT0FBTyxFQUNmLE9BQU8sRUFBRSxHQUFHLEVBQ1osWUFBWSxFQUFFLEVBQUUsRUFDaEIsY0FBYyxFQUFFLElBQUksRUFDcEIsVUFBVSxFQUFFLEVBQUUsSUFDaEI7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPO1FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FB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","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The namespace for array-specific algorithms.\n */\nvar ArrayExt;\n(function (ArrayExt) {\n /**\n * Find the index of the first occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.firstIndexOf(data, 'red'); // -1\n * ArrayExt.firstIndexOf(data, 'one'); // 0\n * ArrayExt.firstIndexOf(data, 'one', 1); // 4\n * ArrayExt.firstIndexOf(data, 'two', 2); // -1\n * ArrayExt.firstIndexOf(data, 'two', 2, 1); // 1\n * ```\n */\n function firstIndexOf(array, value, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n var span;\n if (stop < start) {\n span = (stop + 1) + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (var i = 0; i < span; ++i) {\n var j = (start + i) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.firstIndexOf = firstIndexOf;\n /**\n * Find the index of the last occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.lastIndexOf(data, 'red'); // -1\n * ArrayExt.lastIndexOf(data, 'one'); // 4\n * ArrayExt.lastIndexOf(data, 'one', 1); // 0\n * ArrayExt.lastIndexOf(data, 'two', 0); // -1\n * ArrayExt.lastIndexOf(data, 'two', 0, 1); // 1\n * ```\n */\n function lastIndexOf(array, value, start, stop) {\n if (start === void 0) { start = -1; }\n if (stop === void 0) { stop = 0; }\n var n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n var span;\n if (start < stop) {\n span = (start + 1) + (n - stop);\n }\n else {\n span = start - stop + 1;\n }\n for (var i = 0; i < span; ++i) {\n var j = (start - i + n) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.lastIndexOf = lastIndexOf;\n /**\n * Find the index of the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstIndex(data, isEven); // 1\n * ArrayExt.findFirstIndex(data, isEven, 4); // 5\n * ArrayExt.findFirstIndex(data, isEven, 6); // -1\n * ArrayExt.findFirstIndex(data, isEven, 6, 5); // 1\n * ```\n */\n function findFirstIndex(array, fn, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n var span;\n if (stop < start) {\n span = (stop + 1) + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (var i = 0; i < span; ++i) {\n var j = (start + i) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findFirstIndex = findFirstIndex;\n /**\n * Find the index of the last value which matches a predicate.\n *\n * @param object - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastIndex(data, isEven); // 5\n * ArrayExt.findLastIndex(data, isEven, 4); // 3\n * ArrayExt.findLastIndex(data, isEven, 0); // -1\n * ArrayExt.findLastIndex(data, isEven, 0, 1); // 5\n * ```\n */\n function findLastIndex(array, fn, start, stop) {\n if (start === void 0) { start = -1; }\n if (stop === void 0) { stop = 0; }\n var n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n var d;\n if (start < stop) {\n d = (start + 1) + (n - stop);\n }\n else {\n d = start - stop + 1;\n }\n for (var i = 0; i < d; ++i) {\n var j = (start - i + n) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findLastIndex = findLastIndex;\n /**\n * Find the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstValue(data, isEven); // 2\n * ArrayExt.findFirstValue(data, isEven, 2); // 4\n * ArrayExt.findFirstValue(data, isEven, 6); // undefined\n * ArrayExt.findFirstValue(data, isEven, 6, 5); // 2\n * ```\n */\n function findFirstValue(array, fn, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var index = findFirstIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findFirstValue = findFirstValue;\n /**\n * Find the last value which matches a predicate.\n *\n * @param object - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The last matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastValue(data, isEven); // 2\n * ArrayExt.findLastValue(data, isEven, 4); // 4\n * ArrayExt.findLastValue(data, isEven, 0); // undefined\n * ArrayExt.findLastValue(data, isEven, 0, 1); // 2\n * ```\n */\n function findLastValue(array, fn, start, stop) {\n if (start === void 0) { start = -1; }\n if (stop === void 0) { stop = 0; }\n var index = findLastIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findLastValue = findLastValue;\n /**\n * Find the index of the first element which compares `>=` to a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>=` to the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.lowerBound(data, 0, numberCmp); // 0\n * ArrayExt.lowerBound(data, 6, numberCmp); // 3\n * ArrayExt.lowerBound(data, 7, numberCmp); // 3\n * ArrayExt.lowerBound(data, -1, numberCmp); // 0\n * ArrayExt.lowerBound(data, 10, numberCmp); // 6\n * ```\n */\n function lowerBound(array, value, fn, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n var begin = start;\n var span = stop - start + 1;\n while (span > 0) {\n var half = span >> 1;\n var middle = begin + half;\n if (fn(array[middle], value) < 0) {\n begin = middle + 1;\n span -= half + 1;\n }\n else {\n span = half;\n }\n }\n return begin;\n }\n ArrayExt.lowerBound = lowerBound;\n /**\n * Find the index of the first element which compares `>` than a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>` than the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.upperBound(data, 0, numberCmp); // 1\n * ArrayExt.upperBound(data, 6, numberCmp); // 3\n * ArrayExt.upperBound(data, 7, numberCmp); // 5\n * ArrayExt.upperBound(data, -1, numberCmp); // 0\n * ArrayExt.upperBound(data, 10, numberCmp); // 6\n * ```\n */\n function upperBound(array, value, fn, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n var begin = start;\n var span = stop - start + 1;\n while (span > 0) {\n var half = span >> 1;\n var middle = begin + half;\n if (fn(array[middle], value) > 0) {\n span = half;\n }\n else {\n begin = middle + 1;\n span -= half + 1;\n }\n }\n return begin;\n }\n ArrayExt.upperBound = upperBound;\n /**\n * Move an element in an array from one index to another.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param fromIndex - The index of the element to move. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param toIndex - The target index of the element. Negative\n * values are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `fromIndex` or `toIndex` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from from '@phosphor/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.move(data, 1, 2); // [0, 2, 1, 3, 4]\n * ArrayExt.move(data, 4, 2); // [0, 2, 4, 1, 3]\n * ```\n */\n function move(array, fromIndex, toIndex) {\n var n = array.length;\n if (n <= 1) {\n return;\n }\n if (fromIndex < 0) {\n fromIndex = Math.max(0, fromIndex + n);\n }\n else {\n fromIndex = Math.min(fromIndex, n - 1);\n }\n if (toIndex < 0) {\n toIndex = Math.max(0, toIndex + n);\n }\n else {\n toIndex = Math.min(toIndex, n - 1);\n }\n if (fromIndex === toIndex) {\n return;\n }\n var value = array[fromIndex];\n var d = fromIndex < toIndex ? 1 : -1;\n for (var i = fromIndex; i !== toIndex; i += d) {\n array[i] = array[i + d];\n }\n array[toIndex] = value;\n }\n ArrayExt.move = move;\n /**\n * Reverse an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param start - The index of the first element in the range to be\n * reversed, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * reversed, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` index which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.reverse(data, 1, 3); // [0, 3, 2, 1, 4]\n * ArrayExt.reverse(data, 3); // [0, 3, 2, 4, 1]\n * ArrayExt.reverse(data); // [1, 4, 2, 3, 0]\n * ```\n */\n function reverse(array, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n while (start < stop) {\n var a = array[start];\n var b = array[stop];\n array[start++] = b;\n array[stop--] = a;\n }\n }\n ArrayExt.reverse = reverse;\n /**\n * Rotate the elements of an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param delta - The amount of rotation to apply to the elements. A\n * positive value will rotate the elements to the left. A negative\n * value will rotate the elements to the right.\n *\n * @param start - The index of the first element in the range to be\n * rotated, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * rotated, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `delta`, `start`, or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.rotate(data, 2); // [2, 3, 4, 0, 1]\n * ArrayExt.rotate(data, -2); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 10); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 9); // [4, 0, 1, 2, 3]\n * ArrayExt.rotate(data, 2, 1, 3); // [4, 2, 0, 1, 3]\n * ```\n */\n function rotate(array, delta, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n if (start >= stop) {\n return;\n }\n var length = stop - start + 1;\n if (delta > 0) {\n delta = delta % length;\n }\n else if (delta < 0) {\n delta = ((delta % length) + length) % length;\n }\n if (delta === 0) {\n return;\n }\n var pivot = start + delta;\n reverse(array, start, pivot - 1);\n reverse(array, pivot, stop);\n reverse(array, start, stop);\n }\n ArrayExt.rotate = rotate;\n /**\n * Fill an array with a static value.\n *\n * @param array - The mutable array-like object to fill.\n *\n * @param value - The static value to use to fill the array.\n *\n * @param start - The index of the first element in the range to be\n * filled, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * filled, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Notes\n * If `stop < start` the fill will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four'];\n * ArrayExt.fill(data, 'r'); // ['r', 'r', 'r', 'r']\n * ArrayExt.fill(data, 'g', 1); // ['r', 'g', 'g', 'g']\n * ArrayExt.fill(data, 'b', 2, 3); // ['r', 'g', 'b', 'b']\n * ArrayExt.fill(data, 'z', 3, 1); // ['z', 'z', 'b', 'z']\n * ```\n */\n function fill(array, value, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var n = array.length;\n if (n === 0) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n var span;\n if (stop < start) {\n span = (stop + 1) + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (var i = 0; i < span; ++i) {\n array[(start + i) % n] = value;\n }\n }\n ArrayExt.fill = fill;\n /**\n * Insert a value into an array at a specific index.\n *\n * @param array - The array of interest.\n *\n * @param index - The index at which to insert the value. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param value - The value to set at the specified index.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = [0, 1, 2];\n * ArrayExt.insert(data, 0, -1); // [-1, 0, 1, 2]\n * ArrayExt.insert(data, 2, 12); // [-1, 0, 12, 1, 2]\n * ArrayExt.insert(data, -1, 7); // [-1, 0, 12, 1, 7, 2]\n * ArrayExt.insert(data, 6, 19); // [-1, 0, 12, 1, 7, 2, 19]\n * ```\n */\n function insert(array, index, value) {\n var n = array.length;\n if (index < 0) {\n index = Math.max(0, index + n);\n }\n else {\n index = Math.min(index, n);\n }\n for (var i = n; i > index; --i) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n }\n ArrayExt.insert = insert;\n /**\n * Remove and return a value at a specific index in an array.\n *\n * @param array - The array of interest.\n *\n * @param index - The index of the value to remove. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The value at the specified index, or `undefined` if the\n * index is out of range.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeAt(data, 2); // 23\n * ArrayExt.removeAt(data, -2); // 12\n * ArrayExt.removeAt(data, 10); // undefined;\n * ```\n */\n function removeAt(array, index) {\n var n = array.length;\n if (index < 0) {\n index += n;\n }\n if (index < 0 || index >= n) {\n return undefined;\n }\n var value = array[index];\n for (var i = index + 1; i < n; ++i) {\n array[i - 1] = array[i];\n }\n array.length = n - 1;\n return value;\n }\n ArrayExt.removeAt = removeAt;\n /**\n * Remove the first occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstOf(data, 12); // 1\n * ArrayExt.removeFirstOf(data, 17); // -1\n * ArrayExt.removeFirstOf(data, 39, 3); // -1\n * ArrayExt.removeFirstOf(data, 39, 3, 2); // 2\n * ```\n */\n function removeFirstOf(array, value, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var index = firstIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeFirstOf = removeFirstOf;\n /**\n * Remove the last occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastOf(data, 12); // 5\n * ArrayExt.removeLastOf(data, 17); // -1\n * ArrayExt.removeLastOf(data, 39, 2); // -1\n * ArrayExt.removeLastOf(data, 39, 2, 3); // 3\n * ```\n */\n function removeLastOf(array, value, start, stop) {\n if (start === void 0) { start = -1; }\n if (stop === void 0) { stop = 0; }\n var index = lastIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeLastOf = removeLastOf;\n /**\n * Remove all occurrences of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * let data = [14, 12, 23, 39, 14, 12, 19, 14];\n * ArrayExt.removeAllOf(data, 12); // 2\n * ArrayExt.removeAllOf(data, 17); // 0\n * ArrayExt.removeAllOf(data, 14, 1, 4); // 1\n * ```\n */\n function removeAllOf(array, value, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n var count = 0;\n for (var i = 0; i < n; ++i) {\n if (start <= stop && (i >= start && i <= stop) && array[i] === value) {\n count++;\n }\n else if (stop < start && (i <= stop || i >= start) && array[i] === value) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllOf = removeAllOf;\n /**\n * Remove the first occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstWhere(data, isEven); // { index: 0, value: 0 }\n * ArrayExt.removeFirstWhere(data, isEven, 2); // { index: 3, value: 14 }\n * ArrayExt.removeFirstWhere(data, isEven, 4); // { index: -1, value: undefined }\n * ```\n */\n function removeFirstWhere(array, fn, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var value;\n var index = findFirstIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index: index, value: value };\n }\n ArrayExt.removeFirstWhere = removeFirstWhere;\n /**\n * Remove the last occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastWhere(data, isEven); // { index: 5, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2); // { index: 1, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2, 1); // { index: -1, value: undefined }\n * ```\n */\n function removeLastWhere(array, fn, start, stop) {\n if (start === void 0) { start = -1; }\n if (stop === void 0) { stop = 0; }\n var value;\n var index = findLastIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index: index, value: value };\n }\n ArrayExt.removeLastWhere = removeLastWhere;\n /**\n * Remove all occurrences of values which match a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@phosphor/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * function isNegative(value: number): boolean {\n * return value < 0;\n * }\n *\n * let data = [0, 12, -13, -9, 23, 39, 14, -15, 12, 75];\n * ArrayExt.removeAllWhere(data, isEven); // 4\n * ArrayExt.removeAllWhere(data, isNegative, 0, 3); // 2\n * ```\n */\n function removeAllWhere(array, fn, start, stop) {\n if (start === void 0) { start = 0; }\n if (stop === void 0) { stop = -1; }\n var n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n var count = 0;\n for (var i = 0; i < n; ++i) {\n if (start <= stop && (i >= start && i <= stop) && fn(array[i], i)) {\n count++;\n }\n else if (stop < start && (i <= stop || i >= start) && fn(array[i], i)) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllWhere = removeAllWhere;\n})(ArrayExt = exports.ArrayExt || (exports.ArrayExt = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar iter_1 = require(\"./iter\");\n/**\n * Chain together several iterables.\n *\n * @param objects - The iterable or array-like objects of interest.\n *\n * @returns An iterator which yields the values of the iterables\n * in the order in which they are supplied.\n *\n * #### Example\n * ```typescript\n * import { chain, toArray } from '@phosphor/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = chain(data1, data2);\n *\n * toArray(stream); // [1, 2, 3, 4, 5, 6]\n * ```\n */\nfunction chain() {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n return new ChainIterator(iter_1.iter(objects.map(iter_1.iter)));\n}\nexports.chain = chain;\n/**\n * An iterator which chains together several iterators.\n */\nvar ChainIterator = /** @class */ (function () {\n /**\n * Construct a new chain iterator.\n *\n * @param source - The iterator of iterators of interest.\n */\n function ChainIterator(source) {\n this._cloned = false;\n this._source = source;\n this._active = undefined;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n ChainIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n ChainIterator.prototype.clone = function () {\n var result = new ChainIterator(this._source.clone());\n result._active = this._active && this._active.clone();\n result._cloned = true;\n this._cloned = true;\n return result;\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n ChainIterator.prototype.next = function () {\n if (this._active === undefined) {\n var active = this._source.next();\n if (active === undefined) {\n return undefined;\n }\n this._active = this._cloned ? active.clone() : active;\n }\n var value = this._active.next();\n if (value !== undefined) {\n return value;\n }\n this._active = undefined;\n return this.next();\n };\n return ChainIterator;\n}());\nexports.ChainIterator = ChainIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Create an empty iterator.\n *\n * @returns A new iterator which yields nothing.\n *\n * #### Example\n * ```typescript\n * import { empty, toArray } from '@phosphor/algorithm';\n *\n * let stream = empty<number>();\n *\n * toArray(stream); // []\n * ```\n */\nfunction empty() {\n return new EmptyIterator();\n}\nexports.empty = empty;\n/**\n * An iterator which is always empty.\n */\nvar EmptyIterator = /** @class */ (function () {\n /**\n * Construct a new empty iterator.\n */\n function EmptyIterator() {\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n EmptyIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n EmptyIterator.prototype.clone = function () {\n return new EmptyIterator();\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n EmptyIterator.prototype.next = function () {\n return undefined;\n };\n return EmptyIterator;\n}());\nexports.EmptyIterator = EmptyIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar iter_1 = require(\"./iter\");\n/**\n * Filter an iterable for values which pass a test.\n *\n * @param object - The iterable or array-like object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns An iterator which yields the values which pass the test.\n *\n * #### Example\n * ```typescript\n * import { filter, toArray } from '@phosphor/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = filter(data, value => value % 2 === 0);\n *\n * toArray(stream); // [2, 4, 6]\n * ```\n */\nfunction filter(object, fn) {\n return new FilterIterator(iter_1.iter(object), fn);\n}\nexports.filter = filter;\n/**\n * An iterator which yields values which pass a test.\n */\nvar FilterIterator = /** @class */ (function () {\n /**\n * Construct a new filter iterator.\n *\n * @param source - The iterator of values of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n */\n function FilterIterator(source, fn) {\n this._index = 0;\n this._source = source;\n this._fn = fn;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n FilterIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n FilterIterator.prototype.clone = function () {\n var result = new FilterIterator(this._source.clone(), this._fn);\n result._index = this._index;\n return result;\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n FilterIterator.prototype.next = function () {\n var fn = this._fn;\n var it = this._source;\n var value;\n while ((value = it.next()) !== undefined) {\n if (fn(value, this._index++)) {\n return value;\n }\n }\n return undefined;\n };\n return FilterIterator;\n}());\nexports.FilterIterator = FilterIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar iter_1 = require(\"./iter\");\n/**\n * Find the first value in an iterable which matches a predicate.\n *\n * @param object - The iterable or array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { find } from '@phosphor/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * find(data, isCat).name; // 'fluffy'\n * ```\n */\nfunction find(object, fn) {\n var index = 0;\n var it = iter_1.iter(object);\n var value;\n while ((value = it.next()) !== undefined) {\n if (fn(value, index++)) {\n return value;\n }\n }\n return undefined;\n}\nexports.find = find;\n/**\n * Find the minimum value in an iterable.\n *\n * @param object - The iterable or array-like object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The minimum value in the iterable. If multiple values are\n * equivalent to the minimum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { min } from '@phosphor/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * min([7, 4, 0, 3, 9, 4], numberCmp); // 0\n * ```\n */\nfunction min(object, fn) {\n var it = iter_1.iter(object);\n var value = it.next();\n if (value === undefined) {\n return undefined;\n }\n var result = value;\n while ((value = it.next()) !== undefined) {\n if (fn(value, result) < 0) {\n result = value;\n }\n }\n return result;\n}\nexports.min = min;\n/**\n * Find the maximum value in an iterable.\n *\n * @param object - The iterable or array-like object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The maximum value in the iterable. If multiple values are\n * equivalent to the maximum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { max } from '@phosphor/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * max([7, 4, 0, 3, 9, 4], numberCmp); // 9\n * ```\n */\nfunction max(object, fn) {\n var it = iter_1.iter(object);\n var value = it.next();\n if (value === undefined) {\n return undefined;\n }\n var result = value;\n while ((value = it.next()) !== undefined) {\n if (fn(value, result) > 0) {\n result = value;\n }\n }\n return result;\n}\nexports.max = max;\n/**\n * Find the minimum and maximum values in an iterable.\n *\n * @param object - The iterable or array-like object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns A 2-tuple of the `[min, max]` values in the iterable. If\n * multiple values are equivalent, the left-most values are returned.\n * If the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { minmax } from '@phosphor/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * minmax([7, 4, 0, 3, 9, 4], numberCmp); // [0, 9]\n * ```\n */\nfunction minmax(object, fn) {\n var it = iter_1.iter(object);\n var value = it.next();\n if (value === undefined) {\n return undefined;\n }\n var vmin = value;\n var vmax = value;\n while ((value = it.next()) !== undefined) {\n if (fn(value, vmin) < 0) {\n vmin = value;\n }\n else if (fn(value, vmax) > 0) {\n vmax = value;\n }\n }\n return [vmin, vmax];\n}\nexports.minmax = minmax;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar iter_1 = require(\"./iter\");\n/**\n * Transform the values of an iterable with a mapping function.\n *\n * @param object - The iterable or array-like object of interest.\n *\n * @param fn - The mapping function to invoke for each value.\n *\n * @returns An iterator which yields the transformed values.\n *\n * #### Example\n * ```typescript\n * import { map, toArray } from '@phosphor/algorithm';\n *\n * let data = [1, 2, 3];\n *\n * let stream = map(data, value => value * 2);\n *\n * toArray(stream); // [2, 4, 6]\n * ```\n */\nfunction map(object, fn) {\n return new MapIterator(iter_1.iter(object), fn);\n}\nexports.map = map;\n/**\n * An iterator which transforms values using a mapping function.\n */\nvar MapIterator = /** @class */ (function () {\n /**\n * Construct a new map iterator.\n *\n * @param source - The iterator of values of interest.\n *\n * @param fn - The mapping function to invoke for each value.\n */\n function MapIterator(source, fn) {\n this._index = 0;\n this._source = source;\n this._fn = fn;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n MapIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n MapIterator.prototype.clone = function () {\n var result = new MapIterator(this._source.clone(), this._fn);\n result._index = this._index;\n return result;\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n MapIterator.prototype.next = function () {\n var value = this._source.next();\n if (value === undefined) {\n return undefined;\n }\n return this._fn.call(undefined, value, this._index++);\n };\n return MapIterator;\n}());\nexports.MapIterator = MapIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Create an iterator of evenly spaced values.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns An iterator which produces evenly spaced values.\n *\n * #### Notes\n * In the single argument form of `range(stop)`, `start` defaults to\n * `0` and `step` defaults to `1`.\n *\n * In the two argument form of `range(start, stop)`, `step` defaults\n * to `1`.\n */\nfunction range(start, stop, step) {\n if (stop === undefined) {\n return new RangeIterator(0, start, 1);\n }\n if (step === undefined) {\n return new RangeIterator(start, stop, 1);\n }\n return new RangeIterator(start, stop, step);\n}\nexports.range = range;\n/**\n * An iterator which produces a range of evenly spaced values.\n */\nvar RangeIterator = /** @class */ (function () {\n /**\n * Construct a new range iterator.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n */\n function RangeIterator(start, stop, step) {\n this._index = 0;\n this._start = start;\n this._stop = stop;\n this._step = step;\n this._length = Private.rangeLength(start, stop, step);\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n RangeIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n RangeIterator.prototype.clone = function () {\n var result = new RangeIterator(this._start, this._stop, this._step);\n result._index = this._index;\n return result;\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n RangeIterator.prototype.next = function () {\n if (this._index >= this._length) {\n return undefined;\n }\n return this._start + this._step * this._index++;\n };\n return RangeIterator;\n}());\nexports.RangeIterator = RangeIterator;\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Compute the effective length of a range.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns The number of steps need to traverse the range.\n */\n function rangeLength(start, stop, step) {\n if (step === 0) {\n return Infinity;\n }\n if (start > stop && step > 0) {\n return 0;\n }\n if (start < stop && step < 0) {\n return 0;\n }\n return Math.ceil((stop - start) / step);\n }\n Private.rangeLength = rangeLength;\n})(Private || (Private = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar iter_1 = require(\"./iter\");\nfunction reduce(object, fn, initial) {\n // Setup the iterator and fetch the first value.\n var index = 0;\n var it = iter_1.iter(object);\n var first = it.next();\n // An empty iterator and no initial value is an error.\n if (first === undefined && initial === undefined) {\n throw new TypeError('Reduce of empty iterable with no initial value.');\n }\n // If the iterator is empty, return the initial value.\n if (first === undefined) {\n return initial;\n }\n // If the iterator has a single item and no initial value, the\n // reducer is not invoked and the first item is the return value.\n var second = it.next();\n if (second === undefined && initial === undefined) {\n return first;\n }\n // If iterator has a single item and an initial value is provided,\n // the reducer is invoked and that result is the return value.\n if (second === undefined) {\n return fn(initial, first, index++);\n }\n // Setup the initial accumlated value.\n var accumulator;\n if (initial === undefined) {\n accumulator = fn(first, second, index++);\n }\n else {\n accumulator = fn(fn(initial, first, index++), second, index++);\n }\n // Iterate the rest of the values, updating the accumulator.\n var next;\n while ((next = it.next()) !== undefined) {\n accumulator = fn(accumulator, next, index++);\n }\n // Return the final accumulated value.\n return accumulator;\n}\nexports.reduce = reduce;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Create an iterator which repeats a value a number of times.\n *\n * @param value - The value to repeat.\n *\n * @param count - The number of times to repeat the value.\n *\n * @returns A new iterator which repeats the specified value.\n *\n * #### Example\n * ```typescript\n * import { repeat, toArray } from '@phosphor/algorithm';\n *\n * let stream = repeat(7, 3);\n *\n * toArray(stream); // [7, 7, 7]\n * ```\n */\nfunction repeat(value, count) {\n return new RepeatIterator(value, count);\n}\nexports.repeat = repeat;\n/**\n * Create an iterator which yields a value a single time.\n *\n * @param value - The value to wrap in an iterator.\n *\n * @returns A new iterator which yields the value a single time.\n *\n * #### Example\n * ```typescript\n * import { once, toArray } from '@phosphor/algorithm';\n *\n * let stream = once(7);\n *\n * toArray(stream); // [7]\n * ```\n */\nfunction once(value) {\n return new RepeatIterator(value, 1);\n}\nexports.once = once;\n/**\n * An iterator which repeats a value a specified number of times.\n */\nvar RepeatIterator = /** @class */ (function () {\n /**\n * Construct a new repeat iterator.\n *\n * @param value - The value to repeat.\n *\n * @param count - The number of times to repeat the value.\n */\n function RepeatIterator(value, count) {\n this._value = value;\n this._count = count;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n RepeatIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n RepeatIterator.prototype.clone = function () {\n return new RepeatIterator(this._value, this._count);\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n RepeatIterator.prototype.next = function () {\n if (this._count <= 0) {\n return undefined;\n }\n this._count--;\n return this._value;\n };\n return RepeatIterator;\n}());\nexports.RepeatIterator = RepeatIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Create an iterator for a retroable object.\n *\n * @param object - The retroable or array-like object of interest.\n *\n * @returns An iterator which traverses the object's values in reverse.\n *\n * #### Example\n * ```typescript\n * import { retro, toArray } from '@phosphor/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = retro(data);\n *\n * toArray(stream); // [6, 5, 4, 3, 2, 1]\n * ```\n */\nfunction retro(object) {\n var it;\n if (typeof object.retro === 'function') {\n it = object.retro();\n }\n else {\n it = new RetroArrayIterator(object);\n }\n return it;\n}\nexports.retro = retro;\n/**\n * An iterator which traverses an array-like object in reverse.\n *\n * #### Notes\n * This iterator can be used for any builtin JS array-like object.\n */\nvar RetroArrayIterator = /** @class */ (function () {\n /**\n * Construct a new retro iterator.\n *\n * @param source - The array-like object of interest.\n */\n function RetroArrayIterator(source) {\n this._source = source;\n this._index = source.length - 1;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n RetroArrayIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n RetroArrayIterator.prototype.clone = function () {\n var result = new RetroArrayIterator(this._source);\n result._index = this._index;\n return result;\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n RetroArrayIterator.prototype.next = function () {\n if (this._index < 0 || this._index >= this._source.length) {\n return undefined;\n }\n return this._source[this._index--];\n };\n return RetroArrayIterator;\n}());\nexports.RetroArrayIterator = RetroArrayIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar iter_1 = require(\"./iter\");\n/**\n * Topologically sort an iterable of edges.\n *\n * @param edges - The iterable or array-like object of edges to sort.\n * An edge is represented as a 2-tuple of `[fromNode, toNode]`.\n *\n * @returns The topologically sorted array of nodes.\n *\n * #### Notes\n * If a cycle is present in the graph, the cycle will be ignored and\n * the return value will be only approximately sorted.\n *\n * #### Example\n * ```typescript\n * import { topologicSort } from '@phosphor/algorithm';\n *\n * let data = [\n * ['d', 'e'],\n * ['c', 'd'],\n * ['a', 'b'],\n * ['b', 'c']\n * ];\n *\n * topologicSort(data); // ['a', 'b', 'c', 'd', 'e']\n */\nfunction topologicSort(edges) {\n // Setup the shared sorting state.\n var sorted = [];\n var visited = new Set();\n var graph = new Map();\n // Add the edges to the graph.\n iter_1.each(edges, addEdge);\n // Visit each node in the graph.\n graph.forEach(function (v, k) { visit(k); });\n // Return the sorted results.\n return sorted;\n // Add an edge to the graph.\n function addEdge(edge) {\n var fromNode = edge[0], toNode = edge[1];\n var children = graph.get(toNode);\n if (children) {\n children.push(fromNode);\n }\n else {\n graph.set(toNode, [fromNode]);\n }\n }\n // Recursively visit the node.\n function visit(node) {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n var children = graph.get(node);\n if (children) {\n children.forEach(visit);\n }\n sorted.push(node);\n }\n}\nexports.topologicSort = topologicSort;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar iter_1 = require(\"./iter\");\n/**\n * Iterate over an iterable using a stepped increment.\n *\n * @param object - The iterable or array-like object of interest.\n *\n * @param step - The distance to step on each iteration. A value\n * of less than `1` will behave the same as a value of `1`.\n *\n * @returns An iterator which traverses the iterable step-wise.\n *\n * #### Example\n * ```typescript\n * import { stride, toArray } from '@phosphor/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = stride(data, 2);\n *\n * toArray(stream); // [1, 3, 5];\n * ```\n */\nfunction stride(object, step) {\n return new StrideIterator(iter_1.iter(object), step);\n}\nexports.stride = stride;\n/**\n * An iterator which traverses a source iterator step-wise.\n */\nvar StrideIterator = /** @class */ (function () {\n /**\n * Construct a new stride iterator.\n *\n * @param source - The iterator of values of interest.\n *\n * @param step - The distance to step on each iteration. A value\n * of less than `1` will behave the same as a value of `1`.\n */\n function StrideIterator(source, step) {\n this._source = source;\n this._step = step;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n StrideIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n StrideIterator.prototype.clone = function () {\n return new StrideIterator(this._source.clone(), this._step);\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n StrideIterator.prototype.next = function () {\n var value = this._source.next();\n for (var n = this._step - 1; n > 0; --n) {\n this._source.next();\n }\n return value;\n };\n return StrideIterator;\n}());\nexports.StrideIterator = StrideIterator;\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The namespace for string-specific algorithms.\n */\nvar StringExt;\n(function (StringExt) {\n /**\n * Find the indices of characters in a source text.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The matched indices, or `null` if there is no match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * In order for there to be a match, all of the characters in `query`\n * **must** appear in `source` in the order given by `query`.\n *\n * Characters are matched using strict `===` equality.\n */\n function findIndices(source, query, start) {\n if (start === void 0) { start = 0; }\n var indices = new Array(query.length);\n for (var i = 0, j = start, n = query.length; i < n; ++i, ++j) {\n j = source.indexOf(query[i], j);\n if (j === -1) {\n return null;\n }\n indices[i] = j;\n }\n return indices;\n }\n StringExt.findIndices = findIndices;\n /**\n * A string matcher which uses a sum-of-squares algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-squares approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The index of each\n * matching character is squared and added to the score. This means\n * that early and consecutive character matches are preferred, while\n * late matches are heavily penalized.\n */\n function matchSumOfSquares(source, query, start) {\n if (start === void 0) { start = 0; }\n var indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n var score = 0;\n for (var i = 0, n = indices.length; i < n; ++i) {\n var j = indices[i] - start;\n score += j * j;\n }\n return { score: score, indices: indices };\n }\n StringExt.matchSumOfSquares = matchSumOfSquares;\n /**\n * A string matcher which uses a sum-of-deltas algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-deltas approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The delta between\n * the indices are summed to create the score. This means that groups\n * of matched characters are preferred, while fragmented matches are\n * penalized.\n */\n function matchSumOfDeltas(source, query, start) {\n if (start === void 0) { start = 0; }\n var indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n var score = 0;\n var last = start - 1;\n for (var i = 0, n = indices.length; i < n; ++i) {\n var j = indices[i];\n score += j - last - 1;\n last = j;\n }\n return { score: score, indices: indices };\n }\n StringExt.matchSumOfDeltas = matchSumOfDeltas;\n /**\n * Highlight the matched characters of a source text.\n *\n * @param source - The text which should be highlighted.\n *\n * @param indices - The indices of the matched characters. They must\n * appear in increasing order and must be in bounds of the source.\n *\n * @param fn - The function to apply to the matched chunks.\n *\n * @returns An array of unmatched and highlighted chunks.\n */\n function highlight(source, indices, fn) {\n // Set up the result array.\n var result = [];\n // Set up the counter variables.\n var k = 0;\n var last = 0;\n var n = indices.length;\n // Iterator over each index.\n while (k < n) {\n // Set up the chunk indices.\n var i = indices[k];\n var j = indices[k];\n // Advance the right chunk index until it's non-contiguous.\n while (++k < n && indices[k] === j + 1) {\n j++;\n }\n // Extract the unmatched text.\n if (last < i) {\n result.push(source.slice(last, i));\n }\n // Extract and highlight the matched text.\n if (i < j + 1) {\n result.push(fn(source.slice(i, j + 1)));\n }\n // Update the last visited index.\n last = j + 1;\n }\n // Extract any remaining unmatched text.\n if (last < source.length) {\n result.push(source.slice(last));\n }\n // Return the highlighted result.\n return result;\n }\n StringExt.highlight = highlight;\n})(StringExt = exports.StringExt || (exports.StringExt = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar iter_1 = require(\"./iter\");\n/**\n * Take a fixed number of items from an iterable.\n *\n * @param object - The iterable or array-like object of interest.\n *\n * @param count - The number of items to take from the iterable.\n *\n * @returns An iterator which yields the specified number of items\n * from the source iterable.\n *\n * #### Notes\n * The returned iterator will exhaust early if the source iterable\n * contains an insufficient number of items.\n */\nfunction take(object, count) {\n return new TakeIterator(iter_1.iter(object), count);\n}\nexports.take = take;\n/**\n * An iterator which takes a fixed number of items from a source.\n */\nvar TakeIterator = /** @class */ (function () {\n /**\n * Construct a new take iterator.\n *\n * @param source - The iterator of interest.\n *\n * @param count - The number of items to take from the source.\n */\n function TakeIterator(source, count) {\n this._source = source;\n this._count = count;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n TakeIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n TakeIterator.prototype.clone = function () {\n return new TakeIterator(this._source.clone(), this._count);\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n TakeIterator.prototype.next = function () {\n if (this._count <= 0) {\n return undefined;\n }\n var value = this._source.next();\n if (value === undefined) {\n return undefined;\n }\n this._count--;\n return value;\n };\n return TakeIterator;\n}());\nexports.TakeIterator = TakeIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar iter_1 = require(\"./iter\");\n/**\n * Iterate several iterables in lockstep.\n *\n * @param objects - The iterable or array-like objects of interest.\n *\n * @returns An iterator which yields successive tuples of values where\n * each value is taken in turn from the provided iterables. It will\n * be as long as the shortest provided iterable.\n *\n * #### Example\n * ```typescript\n * import { zip, toArray } from '@phosphor/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = zip(data1, data2);\n *\n * toArray(stream); // [[1, 4], [2, 5], [3, 6]]\n * ```\n */\nfunction zip() {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n return new ZipIterator(objects.map(iter_1.iter));\n}\nexports.zip = zip;\n/**\n * An iterator which iterates several sources in lockstep.\n */\nvar ZipIterator = /** @class */ (function () {\n /**\n * Construct a new zip iterator.\n *\n * @param source - The iterators of interest.\n */\n function ZipIterator(source) {\n this._source = source;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n ZipIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n ZipIterator.prototype.clone = function () {\n return new ZipIterator(this._source.map(function (it) { return it.clone(); }));\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n ZipIterator.prototype.next = function () {\n var result = new Array(this._source.length);\n for (var i = 0, n = this._source.length; i < n; ++i) {\n var value = this._source[i].next();\n if (value === undefined) {\n return undefined;\n }\n result[i] = value;\n }\n return result;\n };\n return ZipIterator;\n}());\nexports.ZipIterator = ZipIterator;\n","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n__export(require(\"./linkedlist\"));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar algorithm_1 = require(\"@phosphor/algorithm\");\n/**\n * A generic doubly-linked list.\n */\nvar LinkedList = /** @class */ (function () {\n /**\n * Construct a new linked list.\n */\n function LinkedList() {\n this._first = null;\n this._last = null;\n this._length = 0;\n }\n Object.defineProperty(LinkedList.prototype, \"isEmpty\", {\n /**\n * Whether the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get: function () {\n return this._length === 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LinkedList.prototype, \"length\", {\n /**\n * The length of the list.\n *\n * #### Complexity\n * Constant.\n */\n get: function () {\n return this._length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LinkedList.prototype, \"first\", {\n /**\n * The first value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get: function () {\n return this._first ? this._first.value : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LinkedList.prototype, \"last\", {\n /**\n * The last value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get: function () {\n return this._last ? this._last.value : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LinkedList.prototype, \"firstNode\", {\n /**\n * The first node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get: function () {\n return this._first;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LinkedList.prototype, \"lastNode\", {\n /**\n * The last node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get: function () {\n return this._last;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Create an iterator over the values in the list.\n *\n * @returns A new iterator starting with the first value.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.iter = function () {\n return new LinkedList.ForwardValueIterator(this._first);\n };\n /**\n * Create a reverse iterator over the values in the list.\n *\n * @returns A new iterator starting with the last value.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.retro = function () {\n return new LinkedList.RetroValueIterator(this._last);\n };\n /**\n * Create an iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the first node.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.nodes = function () {\n return new LinkedList.ForwardNodeIterator(this._first);\n };\n /**\n * Create a reverse iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the last node.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.retroNodes = function () {\n return new LinkedList.RetroNodeIterator(this._last);\n };\n /**\n * Add a value to the beginning of the list.\n *\n * @param value - The value to add to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.addFirst = function (value) {\n var node = new Private.LinkedListNode(this, value);\n if (!this._first) {\n this._first = node;\n this._last = node;\n }\n else {\n node.next = this._first;\n this._first.prev = node;\n this._first = node;\n }\n this._length++;\n return node;\n };\n /**\n * Add a value to the end of the list.\n *\n * @param value - The value to add to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.addLast = function (value) {\n var node = new Private.LinkedListNode(this, value);\n if (!this._last) {\n this._first = node;\n this._last = node;\n }\n else {\n node.prev = this._last;\n this._last.next = node;\n this._last = node;\n }\n this._length++;\n return node;\n };\n /**\n * Insert a value before a specific node in the list.\n *\n * @param value - The value to insert before the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.insertBefore = function (value, ref) {\n if (!ref || ref === this._first) {\n return this.addFirst(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n var node = new Private.LinkedListNode(this, value);\n var _ref = ref;\n var prev = _ref.prev;\n node.next = _ref;\n node.prev = prev;\n _ref.prev = node;\n prev.next = node;\n this._length++;\n return node;\n };\n /**\n * Insert a value after a specific node in the list.\n *\n * @param value - The value to insert after the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.insertAfter = function (value, ref) {\n if (!ref || ref === this._last) {\n return this.addLast(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n var node = new Private.LinkedListNode(this, value);\n var _ref = ref;\n var next = _ref.next;\n node.next = next;\n node.prev = _ref;\n _ref.next = node;\n next.prev = node;\n this._length++;\n return node;\n };\n /**\n * Remove and return the value at the beginning of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.removeFirst = function () {\n var node = this._first;\n if (!node) {\n return undefined;\n }\n if (node === this._last) {\n this._first = null;\n this._last = null;\n }\n else {\n this._first = node.next;\n this._first.prev = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._length--;\n return node.value;\n };\n /**\n * Remove and return the value at the end of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n LinkedList.prototype.removeLast = function () {\n var node = this._last;\n if (!node) {\n return undefined;\n }\n if (node === this._first) {\n this._first = null;\n this._last = null;\n }\n else {\n this._last = node.prev;\n this._last.next = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._length--;\n return node.value;\n };\n /**\n * Remove a specific node from the list.\n *\n * @param node - The node to remove from the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * The node must be owned by the list.\n */\n LinkedList.prototype.removeNode = function (node) {\n if (!(node instanceof Private.LinkedListNode) || node.list !== this) {\n throw new Error('Node is not owned by the list.');\n }\n var _node = node;\n if (_node === this._first && _node === this._last) {\n this._first = null;\n this._last = null;\n }\n else if (_node === this._first) {\n this._first = _node.next;\n this._first.prev = null;\n }\n else if (_node === this._last) {\n this._last = _node.prev;\n this._last.next = null;\n }\n else {\n _node.next.prev = _node.prev;\n _node.prev.next = _node.next;\n }\n _node.list = null;\n _node.next = null;\n _node.prev = null;\n this._length--;\n };\n /**\n * Remove all values from the list.\n *\n * #### Complexity\n * Linear.\n */\n LinkedList.prototype.clear = function () {\n var node = this._first;\n while (node) {\n var next = node.next;\n node.list = null;\n node.prev = null;\n node.next = null;\n node = next;\n }\n this._first = null;\n this._last = null;\n this._length = 0;\n };\n return LinkedList;\n}());\nexports.LinkedList = LinkedList;\n/**\n * The namespace for the `LinkedList` class statics.\n */\n(function (LinkedList) {\n /**\n * Create a linked list from an iterable of values.\n *\n * @param values - The iterable or array-like object of interest.\n *\n * @returns A new linked list initialized with the given values.\n */\n function from(values) {\n var list = new LinkedList();\n algorithm_1.each(values, function (value) { list.addLast(value); });\n return list;\n }\n LinkedList.from = from;\n /**\n * A forward iterator for values in a linked list.\n */\n var ForwardValueIterator = /** @class */ (function () {\n /**\n * Construct a forward value iterator.\n *\n * @param node - The first node in the list.\n */\n function ForwardValueIterator(node) {\n this._node = node;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n ForwardValueIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n ForwardValueIterator.prototype.clone = function () {\n return new ForwardValueIterator(this._node);\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n ForwardValueIterator.prototype.next = function () {\n if (!this._node) {\n return undefined;\n }\n var node = this._node;\n this._node = node.next;\n return node.value;\n };\n return ForwardValueIterator;\n }());\n LinkedList.ForwardValueIterator = ForwardValueIterator;\n /**\n * A reverse iterator for values in a linked list.\n */\n var RetroValueIterator = /** @class */ (function () {\n /**\n * Construct a retro value iterator.\n *\n * @param node - The last node in the list.\n */\n function RetroValueIterator(node) {\n this._node = node;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n RetroValueIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n RetroValueIterator.prototype.clone = function () {\n return new RetroValueIterator(this._node);\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n RetroValueIterator.prototype.next = function () {\n if (!this._node) {\n return undefined;\n }\n var node = this._node;\n this._node = node.prev;\n return node.value;\n };\n return RetroValueIterator;\n }());\n LinkedList.RetroValueIterator = RetroValueIterator;\n /**\n * A forward iterator for nodes in a linked list.\n */\n var ForwardNodeIterator = /** @class */ (function () {\n /**\n * Construct a forward node iterator.\n *\n * @param node - The first node in the list.\n */\n function ForwardNodeIterator(node) {\n this._node = node;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n ForwardNodeIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n ForwardNodeIterator.prototype.clone = function () {\n return new ForwardNodeIterator(this._node);\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n ForwardNodeIterator.prototype.next = function () {\n if (!this._node) {\n return undefined;\n }\n var node = this._node;\n this._node = node.next;\n return node;\n };\n return ForwardNodeIterator;\n }());\n LinkedList.ForwardNodeIterator = ForwardNodeIterator;\n /**\n * A reverse iterator for nodes in a linked list.\n */\n var RetroNodeIterator = /** @class */ (function () {\n /**\n * Construct a retro node iterator.\n *\n * @param node - The last node in the list.\n */\n function RetroNodeIterator(node) {\n this._node = node;\n }\n /**\n * Get an iterator over the object's values.\n *\n * @returns An iterator which yields the object's values.\n */\n RetroNodeIterator.prototype.iter = function () {\n return this;\n };\n /**\n * Create an independent clone of the iterator.\n *\n * @returns A new independent clone of the iterator.\n */\n RetroNodeIterator.prototype.clone = function () {\n return new RetroNodeIterator(this._node);\n };\n /**\n * Get the next value from the iterator.\n *\n * @returns The next value from the iterator, or `undefined`.\n */\n RetroNodeIterator.prototype.next = function () {\n if (!this._node) {\n return undefined;\n }\n var node = this._node;\n this._node = node.prev;\n return node;\n };\n return RetroNodeIterator;\n }());\n LinkedList.RetroNodeIterator = RetroNodeIterator;\n})(LinkedList = exports.LinkedList || (exports.LinkedList = {}));\nexports.LinkedList = LinkedList;\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The internal linked list node implementation.\n */\n var LinkedListNode = /** @class */ (function () {\n /**\n * Construct a new linked list node.\n *\n * @param list - The list which owns the node.\n *\n * @param value - The value for the link.\n */\n function LinkedListNode(list, value) {\n /**\n * The linked list which created and owns the node.\n */\n this.list = null;\n /**\n * The next node in the list.\n */\n this.next = null;\n /**\n * The previous node in the list.\n */\n this.prev = null;\n this.list = list;\n this.value = value;\n }\n return LinkedListNode;\n }());\n Private.LinkedListNode = LinkedListNode;\n})(Private || (Private = {}));\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The namespace for element related utilities.\n */\nvar ElementExt;\n(function (ElementExt) {\n /**\n * Compute the box sizing for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The box sizing data for the specified element.\n */\n function boxSizing(element) {\n var style = window.getComputedStyle(element);\n var bt = parseFloat(style.borderTopWidth) || 0;\n var bl = parseFloat(style.borderLeftWidth) || 0;\n var br = parseFloat(style.borderRightWidth) || 0;\n var bb = parseFloat(style.borderBottomWidth) || 0;\n var pt = parseFloat(style.paddingTop) || 0;\n var pl = parseFloat(style.paddingLeft) || 0;\n var pr = parseFloat(style.paddingRight) || 0;\n var pb = parseFloat(style.paddingBottom) || 0;\n var hs = bl + pl + pr + br;\n var vs = bt + pt + pb + bb;\n return {\n borderTop: bt,\n borderLeft: bl,\n borderRight: br,\n borderBottom: bb,\n paddingTop: pt,\n paddingLeft: pl,\n paddingRight: pr,\n paddingBottom: pb,\n horizontalSum: hs,\n verticalSum: vs\n };\n }\n ElementExt.boxSizing = boxSizing;\n /**\n * Compute the size limits for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The size limit data for the specified element.\n */\n function sizeLimits(element) {\n var style = window.getComputedStyle(element);\n var minWidth = parseFloat(style.minWidth) || 0;\n var minHeight = parseFloat(style.minHeight) || 0;\n var maxWidth = parseFloat(style.maxWidth) || Infinity;\n var maxHeight = parseFloat(style.maxHeight) || Infinity;\n maxWidth = Math.max(minWidth, maxWidth);\n maxHeight = Math.max(minHeight, maxHeight);\n return { minWidth: minWidth, minHeight: minHeight, maxWidth: maxWidth, maxHeight: maxHeight };\n }\n ElementExt.sizeLimits = sizeLimits;\n /**\n * Test whether a client position lies within an element.\n *\n * @param element - The DOM element of interest.\n *\n * @param clientX - The client X coordinate of interest.\n *\n * @param clientY - The client Y coordinate of interest.\n *\n * @returns Whether the point is within the given element.\n */\n function hitTest(element, clientX, clientY) {\n var rect = element.getBoundingClientRect();\n return (clientX >= rect.left &&\n clientX < rect.right &&\n clientY >= rect.top &&\n clientY < rect.bottom);\n }\n ElementExt.hitTest = hitTest;\n /**\n * Vertically scroll an element into view if needed.\n *\n * @param area - The scroll area element.\n *\n * @param element - The element of interest.\n *\n * #### Notes\n * This follows the \"nearest\" behavior of the native `scrollIntoView`\n * method, which is not supported by all browsers.\n * https://drafts.csswg.org/cssom-view/#element-scrolling-members\n *\n * If the element fully covers the visible area or is fully contained\n * within the visible area, no scrolling will take place. Otherwise,\n * the nearest edges of the area and element are aligned.\n */\n function scrollIntoViewIfNeeded(area, element) {\n var ar = area.getBoundingClientRect();\n var er = element.getBoundingClientRect();\n if (er.top <= ar.top && er.bottom >= ar.bottom) {\n return;\n }\n if (er.top < ar.top && er.height <= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.bottom > ar.bottom && er.height >= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.top < ar.top && er.height > ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n if (er.bottom > ar.bottom && er.height < ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n }\n ElementExt.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;\n})(ElementExt = exports.ElementExt || (exports.ElementExt = {}));\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The namespace for platform related utilities.\n */\nvar Platform;\n(function (Platform) {\n /**\n * A flag indicating whether the platform is Mac.\n */\n Platform.IS_MAC = !!navigator.platform.match(/Mac/i);\n /**\n * A flag indicating whether the platform is Windows.\n */\n Platform.IS_WIN = !!navigator.platform.match(/Win/i);\n /**\n * A flag indicating whether the browser is IE.\n */\n Platform.IS_IE = /Trident/.test(navigator.userAgent);\n /**\n * A flag indicating whether the browser is Edge.\n */\n Platform.IS_EDGE = /Edge/.test(navigator.userAgent);\n})(Platform = exports.Platform || (exports.Platform = {}));\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The namespace for selector related utilities.\n */\nvar Selector;\n(function (Selector) {\n /**\n * Calculate the specificity of a single CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns The specificity of the selector.\n *\n * #### Undefined Behavior\n * The selector is invalid.\n *\n * #### Notes\n * This is based on https://www.w3.org/TR/css3-selectors/#specificity\n *\n * A larger number represents a more specific selector.\n *\n * The smallest possible specificity is `0`.\n *\n * The result is represented as a hex number `0x<aa><bb><cc>` where\n * each component is the count of the respective selector clause.\n *\n * If the selector contains commas, only the first clause is used.\n *\n * The computed result is cached, so subsequent calculations for the\n * same selector are extremely fast.\n */\n function calculateSpecificity(selector) {\n if (selector in Private.specificityCache) {\n return Private.specificityCache[selector];\n }\n var result = Private.calculateSingle(selector);\n return Private.specificityCache[selector] = result;\n }\n Selector.calculateSpecificity = calculateSpecificity;\n /**\n * Test whether a selector is a valid CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns `true` if the selector is valid, `false` otherwise.\n *\n * #### Notes\n * The computed result is cached, so subsequent tests for the same\n * selector are extremely fast.\n */\n function isValid(selector) {\n if (selector in Private.validityCache) {\n return Private.validityCache[selector];\n }\n var result = true;\n try {\n Private.testElem.querySelector(selector);\n }\n catch (err) {\n result = false;\n }\n return Private.validityCache[selector] = result;\n }\n Selector.isValid = isValid;\n /**\n * Test whether an element matches a CSS selector.\n *\n * @param element - The element of interest.\n *\n * @param selector - The valid CSS selector of interest.\n *\n * @returns `true` if the element is a match, `false` otherwise.\n *\n * #### Notes\n * This function uses the builtin browser capabilities when possible,\n * falling back onto a document query otherwise.\n */\n function matches(element, selector) {\n return Private.protoMatchFunc.call(element, selector);\n }\n Selector.matches = matches;\n})(Selector = exports.Selector || (exports.Selector = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A cache of computed selector specificity values.\n */\n Private.specificityCache = Object.create(null);\n /**\n * A cache of computed selector validity.\n */\n Private.validityCache = Object.create(null);\n /**\n * An empty element for testing selector validity.\n */\n Private.testElem = document.createElement('div');\n /**\n * A cross-browser CSS selector matching prototype function.\n */\n Private.protoMatchFunc = (function () {\n var proto = Element.prototype;\n return (proto.matches ||\n proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector ||\n (function (selector) {\n var elem = this;\n var matches = elem.ownerDocument.querySelectorAll(selector);\n return Array.prototype.indexOf.call(matches, elem) !== -1;\n }));\n })();\n /**\n * Calculate the specificity of a single selector.\n *\n * The behavior is undefined if the selector is invalid.\n */\n function calculateSingle(selector) {\n // Ignore anything after the first comma.\n selector = selector.split(',', 1)[0];\n // Setup the aggregate counters.\n var a = 0;\n var b = 0;\n var c = 0;\n // Apply a regex to the front of the selector. If it succeeds, that\n // portion of the selector is removed. Returns a success/fail flag.\n function match(re) {\n var match = selector.match(re);\n if (match === null) {\n return false;\n }\n selector = selector.slice(match[0].length);\n return true;\n }\n // Replace the negation pseudo-class (which is ignored),\n // but keep its inner content (which is not ignored).\n selector = selector.replace(NEGATION_RE, ' $1 ');\n // Continue matching until the selector is consumed.\n while (selector.length > 0) {\n // Match an ID selector.\n if (match(ID_RE)) {\n a++;\n continue;\n }\n // Match a class selector.\n if (match(CLASS_RE)) {\n b++;\n continue;\n }\n // Match an attribute selector.\n if (match(ATTR_RE)) {\n b++;\n continue;\n }\n // Match a pseudo-element selector. This is done before matching\n // a pseudo-class since this regex overlaps with that regex.\n if (match(PSEUDO_ELEM_RE)) {\n c++;\n continue;\n }\n // Match a pseudo-class selector.\n if (match(PSEDUO_CLASS_RE)) {\n b++;\n continue;\n }\n // Match a plain type selector.\n if (match(TYPE_RE)) {\n c++;\n continue;\n }\n // Finally, match any ignored characters.\n if (match(IGNORE_RE)) {\n continue;\n }\n // At this point, the selector is assumed to be invalid.\n return 0;\n }\n // Clamp each component to a reasonable base.\n a = Math.min(a, 0xFF);\n b = Math.min(b, 0xFF);\n c = Math.min(c, 0xFF);\n // Combine the components into a single result.\n return (a << 16) | (b << 8) | c;\n }\n Private.calculateSingle = calculateSingle;\n /**\n * A regex which matches an ID selector at string start.\n */\n var ID_RE = /^#[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a class selector at string start.\n */\n var CLASS_RE = /^\\.[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches an attribute selector at string start.\n */\n var ATTR_RE = /^\\[[^\\]]+\\]/;\n /**\n * A regex which matches a type selector at string start.\n */\n var TYPE_RE = /^[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a pseudo-element selector at string start.\n */\n var PSEUDO_ELEM_RE = /^(::[^\\s\\+>~#\\.\\[:]+|:first-line|:first-letter|:before|:after)/;\n /**\n * A regex which matches a pseudo-class selector at string start.\n */\n var PSEDUO_CLASS_RE = /^:[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches ignored characters at string start.\n */\n var IGNORE_RE = /^[\\s\\+>~\\*]+/;\n /**\n * A regex which matches the negation pseudo-class globally.\n */\n var NEGATION_RE = /:not\\(([^\\)]+)\\)/g;\n})(Private || (Private = {}));\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar boxlayout_1 = require(\"./boxlayout\");\r\nvar panel_1 = require(\"./panel\");\r\n/**\r\n * A panel which arranges its widgets in a single row or column.\r\n *\r\n * #### Notes\r\n * This class provides a convenience wrapper around a [[BoxLayout]].\r\n */\r\nvar BoxPanel = /** @class */ (function (_super) {\r\n __extends(BoxPanel, _super);\r\n /**\r\n * Construct a new box panel.\r\n *\r\n * @param options - The options for initializing the box panel.\r\n */\r\n function BoxPanel(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, { layout: Private.createLayout(options) }) || this;\r\n _this.addClass('p-BoxPanel');\r\n return _this;\r\n }\r\n Object.defineProperty(BoxPanel.prototype, \"direction\", {\r\n /**\r\n * Get the layout direction for the box panel.\r\n */\r\n get: function () {\r\n return this.layout.direction;\r\n },\r\n /**\r\n * Set the layout direction for the box panel.\r\n */\r\n set: function (value) {\r\n this.layout.direction = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(BoxPanel.prototype, \"alignment\", {\r\n /**\r\n * Get the content alignment for the box panel.\r\n *\r\n * #### Notes\r\n * This is the alignment of the widgets in the layout direction.\r\n *\r\n * The alignment has no effect if the widgets can expand to fill the\r\n * entire box layout.\r\n */\r\n get: function () {\r\n return this.layout.alignment;\r\n },\r\n /**\r\n * Set the content alignment for the box panel.\r\n *\r\n * #### Notes\r\n * This is the alignment of the widgets in the layout direction.\r\n *\r\n * The alignment has no effect if the widgets can expand to fill the\r\n * entire box layout.\r\n */\r\n set: function (value) {\r\n this.layout.alignment = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(BoxPanel.prototype, \"spacing\", {\r\n /**\r\n * Get the inter-element spacing for the box panel.\r\n */\r\n get: function () {\r\n return this.layout.spacing;\r\n },\r\n /**\r\n * Set the inter-element spacing for the box panel.\r\n */\r\n set: function (value) {\r\n this.layout.spacing = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * A message handler invoked on a `'child-added'` message.\r\n */\r\n BoxPanel.prototype.onChildAdded = function (msg) {\r\n msg.child.addClass('p-BoxPanel-child');\r\n };\r\n /**\r\n * A message handler invoked on a `'child-removed'` message.\r\n */\r\n BoxPanel.prototype.onChildRemoved = function (msg) {\r\n msg.child.removeClass('p-BoxPanel-child');\r\n };\r\n return BoxPanel;\r\n}(panel_1.Panel));\r\nexports.BoxPanel = BoxPanel;\r\n/**\r\n * The namespace for the `BoxPanel` class statics.\r\n */\r\n(function (BoxPanel) {\r\n /**\r\n * Get the box panel stretch factor for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The box panel stretch factor for the widget.\r\n */\r\n function getStretch(widget) {\r\n return boxlayout_1.BoxLayout.getStretch(widget);\r\n }\r\n BoxPanel.getStretch = getStretch;\r\n /**\r\n * Set the box panel stretch factor for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param value - The value for the stretch factor.\r\n */\r\n function setStretch(widget, value) {\r\n boxlayout_1.BoxLayout.setStretch(widget, value);\r\n }\r\n BoxPanel.setStretch = setStretch;\r\n /**\r\n * Get the box panel size basis for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The box panel size basis for the widget.\r\n */\r\n function getSizeBasis(widget) {\r\n return boxlayout_1.BoxLayout.getSizeBasis(widget);\r\n }\r\n BoxPanel.getSizeBasis = getSizeBasis;\r\n /**\r\n * Set the box panel size basis for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param value - The value for the size basis.\r\n */\r\n function setSizeBasis(widget, value) {\r\n boxlayout_1.BoxLayout.setSizeBasis(widget, value);\r\n }\r\n BoxPanel.setSizeBasis = setSizeBasis;\r\n})(BoxPanel = exports.BoxPanel || (exports.BoxPanel = {}));\r\nexports.BoxPanel = BoxPanel;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * Create a box layout for the given panel options.\r\n */\r\n function createLayout(options) {\r\n return options.layout || new boxlayout_1.BoxLayout(options);\r\n }\r\n Private.createLayout = createLayout;\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar coreutils_1 = require(\"@phosphor/coreutils\");\r\nvar commands_1 = require(\"@phosphor/commands\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar virtualdom_1 = require(\"@phosphor/virtualdom\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A widget which displays command items as a searchable palette.\r\n */\r\nvar CommandPalette = /** @class */ (function (_super) {\r\n __extends(CommandPalette, _super);\r\n /**\r\n * Construct a new command palette.\r\n *\r\n * @param options - The options for initializing the palette.\r\n */\r\n function CommandPalette(options) {\r\n var _this = _super.call(this, { node: Private.createNode() }) || this;\r\n _this._activeIndex = -1;\r\n _this._items = [];\r\n _this._results = null;\r\n _this.addClass('p-CommandPalette');\r\n _this.setFlag(widget_1.Widget.Flag.DisallowLayout);\r\n _this.commands = options.commands;\r\n _this.renderer = options.renderer || CommandPalette.defaultRenderer;\r\n _this.commands.commandChanged.connect(_this._onGenericChange, _this);\r\n _this.commands.keyBindingChanged.connect(_this._onGenericChange, _this);\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the widget.\r\n */\r\n CommandPalette.prototype.dispose = function () {\r\n this._items.length = 0;\r\n this._results = null;\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(CommandPalette.prototype, \"searchNode\", {\r\n /**\r\n * The command palette search node.\r\n *\r\n * #### Notes\r\n * This is the node which contains the search-related elements.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-CommandPalette-search')[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandPalette.prototype, \"inputNode\", {\r\n /**\r\n * The command palette input node.\r\n *\r\n * #### Notes\r\n * This is the actual input node for the search area.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-CommandPalette-input')[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandPalette.prototype, \"contentNode\", {\r\n /**\r\n * The command palette content node.\r\n *\r\n * #### Notes\r\n * This is the node which holds the command item nodes.\r\n *\r\n * Modifying this node directly can lead to undefined behavior.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-CommandPalette-content')[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandPalette.prototype, \"items\", {\r\n /**\r\n * A read-only array of the command items in the palette.\r\n */\r\n get: function () {\r\n return this._items;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Add a command item to the command palette.\r\n *\r\n * @param options - The options for creating the command item.\r\n *\r\n * @returns The command item added to the palette.\r\n */\r\n CommandPalette.prototype.addItem = function (options) {\r\n // Create a new command item for the options.\r\n var item = Private.createItem(this.commands, options);\r\n // Add the item to the array.\r\n this._items.push(item);\r\n // Refresh the search results.\r\n this.refresh();\r\n // Return the item added to the palette.\r\n return item;\r\n };\r\n /**\r\n * Remove an item from the command palette.\r\n *\r\n * @param item - The item to remove from the palette.\r\n *\r\n * #### Notes\r\n * This is a no-op if the item is not in the palette.\r\n */\r\n CommandPalette.prototype.removeItem = function (item) {\r\n this.removeItemAt(this._items.indexOf(item));\r\n };\r\n /**\r\n * Remove the item at a given index from the command palette.\r\n *\r\n * @param index - The index of the item to remove.\r\n *\r\n * #### Notes\r\n * This is a no-op if the index is out of range.\r\n */\r\n CommandPalette.prototype.removeItemAt = function (index) {\r\n // Remove the item from the array.\r\n var item = algorithm_1.ArrayExt.removeAt(this._items, index);\r\n // Bail if the index is out of range.\r\n if (!item) {\r\n return;\r\n }\r\n // Refresh the search results.\r\n this.refresh();\r\n };\r\n /**\r\n * Remove all items from the command palette.\r\n */\r\n CommandPalette.prototype.clearItems = function () {\r\n // Bail if there is nothing to remove.\r\n if (this._items.length === 0) {\r\n return;\r\n }\r\n // Clear the array of items.\r\n this._items.length = 0;\r\n // Refresh the search results.\r\n this.refresh();\r\n };\r\n /**\r\n * Clear the search results and schedule an update.\r\n *\r\n * #### Notes\r\n * This should be called whenever the search results of the palette\r\n * should be updated.\r\n *\r\n * This is typically called automatically by the palette as needed,\r\n * but can be called manually if the input text is programatically\r\n * changed.\r\n *\r\n * The rendered results are updated asynchronously.\r\n */\r\n CommandPalette.prototype.refresh = function () {\r\n this._results = null;\r\n this.update();\r\n };\r\n /**\r\n * Handle the DOM events for the command palette.\r\n *\r\n * @param event - The DOM event sent to the command palette.\r\n *\r\n * #### Notes\r\n * This method implements the DOM `EventListener` interface and is\r\n * called in response to events on the command palette's DOM node.\r\n * It should not be called directly by user code.\r\n */\r\n CommandPalette.prototype.handleEvent = function (event) {\r\n switch (event.type) {\r\n case 'click':\r\n this._evtClick(event);\r\n break;\r\n case 'keydown':\r\n this._evtKeyDown(event);\r\n break;\r\n case 'input':\r\n this.refresh();\r\n break;\r\n case 'focus':\r\n case 'blur':\r\n this._toggleFocused();\r\n break;\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n CommandPalette.prototype.onBeforeAttach = function (msg) {\r\n this.node.addEventListener('click', this);\r\n this.node.addEventListener('keydown', this);\r\n this.node.addEventListener('input', this);\r\n this.node.addEventListener('focus', this, true);\r\n this.node.addEventListener('blur', this, true);\r\n };\r\n /**\r\n * A message handler invoked on an `'after-detach'` message.\r\n */\r\n CommandPalette.prototype.onAfterDetach = function (msg) {\r\n this.node.removeEventListener('click', this);\r\n this.node.removeEventListener('keydown', this);\r\n this.node.removeEventListener('input', this);\r\n this.node.removeEventListener('focus', this, true);\r\n this.node.removeEventListener('blur', this, true);\r\n };\r\n /**\r\n * A message handler invoked on an `'activate-request'` message.\r\n */\r\n CommandPalette.prototype.onActivateRequest = function (msg) {\r\n if (this.isAttached) {\r\n var input = this.inputNode;\r\n input.focus();\r\n input.select();\r\n }\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n */\r\n CommandPalette.prototype.onUpdateRequest = function (msg) {\r\n // Fetch the current query text and content node.\r\n var query = this.inputNode.value;\r\n var contentNode = this.contentNode;\r\n // Ensure the search results are generated.\r\n var results = this._results;\r\n if (!results) {\r\n // Generate and store the new search results.\r\n results = this._results = Private.search(this._items, query);\r\n // Reset the active index.\r\n this._activeIndex = (query ? algorithm_1.ArrayExt.findFirstIndex(results, Private.canActivate) : -1);\r\n }\r\n // If there is no query and no results, clear the content.\r\n if (!query && results.length === 0) {\r\n virtualdom_1.VirtualDOM.render(null, contentNode);\r\n return;\r\n }\r\n // If the is a query but no results, render the empty message.\r\n if (query && results.length === 0) {\r\n var content_1 = this.renderer.renderEmptyMessage({ query: query });\r\n virtualdom_1.VirtualDOM.render(content_1, contentNode);\r\n return;\r\n }\r\n // Create the render content for the search results.\r\n var renderer = this.renderer;\r\n var activeIndex = this._activeIndex;\r\n var content = new Array(results.length);\r\n for (var i = 0, n = results.length; i < n; ++i) {\r\n var result = results[i];\r\n if (result.type === 'header') {\r\n var indices = result.indices;\r\n var category = result.category;\r\n content[i] = renderer.renderHeader({ category: category, indices: indices });\r\n }\r\n else {\r\n var item = result.item;\r\n var indices = result.indices;\r\n var active = i === activeIndex;\r\n content[i] = renderer.renderItem({ item: item, indices: indices, active: active });\r\n }\r\n }\r\n // Render the search result content.\r\n virtualdom_1.VirtualDOM.render(content, contentNode);\r\n // Adjust the scroll position as needed.\r\n if (activeIndex < 0 || activeIndex >= results.length) {\r\n contentNode.scrollTop = 0;\r\n }\r\n else {\r\n var element = contentNode.children[activeIndex];\r\n domutils_1.ElementExt.scrollIntoViewIfNeeded(contentNode, element);\r\n }\r\n };\r\n /**\r\n * Handle the `'click'` event for the command palette.\r\n */\r\n CommandPalette.prototype._evtClick = function (event) {\r\n // Bail if the click is not the left button.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Find the index of the item which was clicked.\r\n var index = algorithm_1.ArrayExt.findFirstIndex(this.contentNode.children, function (node) {\r\n return node.contains(event.target);\r\n });\r\n // Bail if the click was not on an item.\r\n if (index === -1) {\r\n return;\r\n }\r\n // Kill the event when a content item is clicked.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Execute the item if possible.\r\n this._execute(index);\r\n };\r\n /**\r\n * Handle the `'keydown'` event for the command palette.\r\n */\r\n CommandPalette.prototype._evtKeyDown = function (event) {\r\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\r\n return;\r\n }\r\n switch (event.keyCode) {\r\n case 13: // Enter\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._execute(this._activeIndex);\r\n break;\r\n case 38: // Up Arrow\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._activatePreviousItem();\r\n break;\r\n case 40: // Down Arrow\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._activateNextItem();\r\n break;\r\n }\r\n };\r\n /**\r\n * Activate the next enabled command item.\r\n */\r\n CommandPalette.prototype._activateNextItem = function () {\r\n // Bail if there are no search results.\r\n if (!this._results || this._results.length === 0) {\r\n return;\r\n }\r\n // Find the next enabled item index.\r\n var ai = this._activeIndex;\r\n var n = this._results.length;\r\n var start = ai < n - 1 ? ai + 1 : 0;\r\n var stop = start === 0 ? n - 1 : start - 1;\r\n this._activeIndex = algorithm_1.ArrayExt.findFirstIndex(this._results, Private.canActivate, start, stop);\r\n // Schedule an update of the items.\r\n this.update();\r\n };\r\n /**\r\n * Activate the previous enabled command item.\r\n */\r\n CommandPalette.prototype._activatePreviousItem = function () {\r\n // Bail if there are no search results.\r\n if (!this._results || this._results.length === 0) {\r\n return;\r\n }\r\n // Find the previous enabled item index.\r\n var ai = this._activeIndex;\r\n var n = this._results.length;\r\n var start = ai <= 0 ? n - 1 : ai - 1;\r\n var stop = start === n - 1 ? 0 : start + 1;\r\n this._activeIndex = algorithm_1.ArrayExt.findLastIndex(this._results, Private.canActivate, start, stop);\r\n // Schedule an update of the items.\r\n this.update();\r\n };\r\n /**\r\n * Execute the command item at the given index, if possible.\r\n */\r\n CommandPalette.prototype._execute = function (index) {\r\n // Bail if there are no search results.\r\n if (!this._results) {\r\n return;\r\n }\r\n // Bail if the index is out of range.\r\n var part = this._results[index];\r\n if (!part) {\r\n return;\r\n }\r\n // Update the search text if the item is a header.\r\n if (part.type === 'header') {\r\n var input = this.inputNode;\r\n input.value = part.category.toLowerCase() + \" \";\r\n input.focus();\r\n this.refresh();\r\n return;\r\n }\r\n // Bail if item is not enabled.\r\n if (!part.item.isEnabled) {\r\n return;\r\n }\r\n // Execute the item.\r\n this.commands.execute(part.item.command, part.item.args);\r\n // Clear the query text.\r\n this.inputNode.value = '';\r\n // Refresh the search results.\r\n this.refresh();\r\n };\r\n /**\r\n * Toggle the focused modifier based on the input node focus state.\r\n */\r\n CommandPalette.prototype._toggleFocused = function () {\r\n var focused = document.activeElement === this.inputNode;\r\n this.toggleClass('p-mod-focused', focused);\r\n };\r\n /**\r\n * A signal handler for generic command changes.\r\n */\r\n CommandPalette.prototype._onGenericChange = function () {\r\n this.refresh();\r\n };\r\n return CommandPalette;\r\n}(widget_1.Widget));\r\nexports.CommandPalette = CommandPalette;\r\n/**\r\n * The namespace for the `CommandPalette` class statics.\r\n */\r\n(function (CommandPalette) {\r\n /**\r\n * The default implementation of `IRenderer`.\r\n */\r\n var Renderer = /** @class */ (function () {\r\n function Renderer() {\r\n }\r\n /**\r\n * Render the virtual element for a command palette header.\r\n *\r\n * @param data - The data to use for rendering the header.\r\n *\r\n * @returns A virtual element representing the header.\r\n */\r\n Renderer.prototype.renderHeader = function (data) {\r\n var content = this.formatHeader(data);\r\n return virtualdom_1.h.li({ className: 'p-CommandPalette-header' }, content);\r\n };\r\n /**\r\n * Render the virtual element for a command palette item.\r\n *\r\n * @param data - The data to use for rendering the item.\r\n *\r\n * @returns A virtual element representing the item.\r\n */\r\n Renderer.prototype.renderItem = function (data) {\r\n var className = this.createItemClass(data);\r\n var dataset = this.createItemDataset(data);\r\n return (virtualdom_1.h.li({ className: className, dataset: dataset }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data)));\r\n };\r\n /**\r\n * Render the empty results message for a command palette.\r\n *\r\n * @param data - The data to use for rendering the message.\r\n *\r\n * @returns A virtual element representing the message.\r\n */\r\n Renderer.prototype.renderEmptyMessage = function (data) {\r\n var content = this.formatEmptyMessage(data);\r\n return virtualdom_1.h.li({ className: 'p-CommandPalette-emptyMessage' }, content);\r\n };\r\n /**\r\n * Render the icon for a command palette item.\r\n *\r\n * @param data - The data to use for rendering the icon.\r\n *\r\n * @returns A virtual element representing the icon.\r\n */\r\n Renderer.prototype.renderItemIcon = function (data) {\r\n var className = this.createIconClass(data);\r\n return virtualdom_1.h.div({ className: className }, data.item.iconLabel);\r\n };\r\n /**\r\n * Render the content for a command palette item.\r\n *\r\n * @param data - The data to use for rendering the content.\r\n *\r\n * @returns A virtual element representing the content.\r\n */\r\n Renderer.prototype.renderItemContent = function (data) {\r\n return (virtualdom_1.h.div({ className: 'p-CommandPalette-itemContent' }, this.renderItemLabel(data), this.renderItemCaption(data)));\r\n };\r\n /**\r\n * Render the label for a command palette item.\r\n *\r\n * @param data - The data to use for rendering the label.\r\n *\r\n * @returns A virtual element representing the label.\r\n */\r\n Renderer.prototype.renderItemLabel = function (data) {\r\n var content = this.formatItemLabel(data);\r\n return virtualdom_1.h.div({ className: 'p-CommandPalette-itemLabel' }, content);\r\n };\r\n /**\r\n * Render the caption for a command palette item.\r\n *\r\n * @param data - The data to use for rendering the caption.\r\n *\r\n * @returns A virtual element representing the caption.\r\n */\r\n Renderer.prototype.renderItemCaption = function (data) {\r\n var content = this.formatItemCaption(data);\r\n return virtualdom_1.h.div({ className: 'p-CommandPalette-itemCaption' }, content);\r\n };\r\n /**\r\n * Render the shortcut for a command palette item.\r\n *\r\n * @param data - The data to use for rendering the shortcut.\r\n *\r\n * @returns A virtual element representing the shortcut.\r\n */\r\n Renderer.prototype.renderItemShortcut = function (data) {\r\n var content = this.formatItemShortcut(data);\r\n return virtualdom_1.h.div({ className: 'p-CommandPalette-itemShortcut' }, content);\r\n };\r\n /**\r\n * Create the class name for the command palette item.\r\n *\r\n * @param data - The data to use for the class name.\r\n *\r\n * @returns The full class name for the command palette item.\r\n */\r\n Renderer.prototype.createItemClass = function (data) {\r\n // Set up the initial class name.\r\n var name = 'p-CommandPalette-item';\r\n // Add the boolean state classes.\r\n if (!data.item.isEnabled) {\r\n name += ' p-mod-disabled';\r\n }\r\n if (data.item.isToggled) {\r\n name += ' p-mod-toggled';\r\n }\r\n if (data.active) {\r\n name += ' p-mod-active';\r\n }\r\n // Add the extra class.\r\n var extra = data.item.className;\r\n if (extra) {\r\n name += \" \" + extra;\r\n }\r\n // Return the complete class name.\r\n return name;\r\n };\r\n /**\r\n * Create the dataset for the command palette item.\r\n *\r\n * @param data - The data to use for creating the dataset.\r\n *\r\n * @returns The dataset for the command palette item.\r\n */\r\n Renderer.prototype.createItemDataset = function (data) {\r\n return __assign({}, data.item.dataset, { command: data.item.command });\r\n };\r\n /**\r\n * Create the class name for the command item icon.\r\n *\r\n * @param data - The data to use for the class name.\r\n *\r\n * @returns The full class name for the item icon.\r\n */\r\n Renderer.prototype.createIconClass = function (data) {\r\n var name = 'p-CommandPalette-itemIcon';\r\n var extra = data.item.iconClass;\r\n return extra ? name + \" \" + extra : name;\r\n };\r\n /**\r\n * Create the render content for the header node.\r\n *\r\n * @param data - The data to use for the header content.\r\n *\r\n * @returns The content to add to the header node.\r\n */\r\n Renderer.prototype.formatHeader = function (data) {\r\n if (!data.indices || data.indices.length === 0) {\r\n return data.category;\r\n }\r\n return algorithm_1.StringExt.highlight(data.category, data.indices, virtualdom_1.h.mark);\r\n };\r\n /**\r\n * Create the render content for the empty message node.\r\n *\r\n * @param data - The data to use for the empty message content.\r\n *\r\n * @returns The content to add to the empty message node.\r\n */\r\n Renderer.prototype.formatEmptyMessage = function (data) {\r\n return \"No commands found that match '\" + data.query + \"'\";\r\n };\r\n /**\r\n * Create the render content for the item shortcut node.\r\n *\r\n * @param data - The data to use for the shortcut content.\r\n *\r\n * @returns The content to add to the shortcut node.\r\n */\r\n Renderer.prototype.formatItemShortcut = function (data) {\r\n var kb = data.item.keyBinding;\r\n return kb ? kb.keys.map(commands_1.CommandRegistry.formatKeystroke).join(', ') : null;\r\n };\r\n /**\r\n * Create the render content for the item label node.\r\n *\r\n * @param data - The data to use for the label content.\r\n *\r\n * @returns The content to add to the label node.\r\n */\r\n Renderer.prototype.formatItemLabel = function (data) {\r\n if (!data.indices || data.indices.length === 0) {\r\n return data.item.label;\r\n }\r\n return algorithm_1.StringExt.highlight(data.item.label, data.indices, virtualdom_1.h.mark);\r\n };\r\n /**\r\n * Create the render content for the item caption node.\r\n *\r\n * @param data - The data to use for the caption content.\r\n *\r\n * @returns The content to add to the caption node.\r\n */\r\n Renderer.prototype.formatItemCaption = function (data) {\r\n return data.item.caption;\r\n };\r\n return Renderer;\r\n }());\r\n CommandPalette.Renderer = Renderer;\r\n /**\r\n * The default `Renderer` instance.\r\n */\r\n CommandPalette.defaultRenderer = new Renderer();\r\n})(CommandPalette = exports.CommandPalette || (exports.CommandPalette = {}));\r\nexports.CommandPalette = CommandPalette;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * Create the DOM node for a command palette.\r\n */\r\n function createNode() {\r\n var node = document.createElement('div');\r\n var search = document.createElement('div');\r\n var wrapper = document.createElement('div');\r\n var input = document.createElement('input');\r\n var content = document.createElement('ul');\r\n search.className = 'p-CommandPalette-search';\r\n wrapper.className = 'p-CommandPalette-wrapper';\r\n input.className = 'p-CommandPalette-input';\r\n content.className = 'p-CommandPalette-content';\r\n input.spellcheck = false;\r\n wrapper.appendChild(input);\r\n search.appendChild(wrapper);\r\n node.appendChild(search);\r\n node.appendChild(content);\r\n return node;\r\n }\r\n Private.createNode = createNode;\r\n /**\r\n * Create a new command item from a command registry and options.\r\n */\r\n function createItem(commands, options) {\r\n return new CommandItem(commands, options);\r\n }\r\n Private.createItem = createItem;\r\n /**\r\n * Search an array of command items for fuzzy matches.\r\n */\r\n function search(items, query) {\r\n // Fuzzy match the items for the query.\r\n var scores = matchItems(items, query);\r\n // Sort the items based on their score.\r\n scores.sort(scoreCmp);\r\n // Create the results for the search.\r\n return createResults(scores);\r\n }\r\n Private.search = search;\r\n /**\r\n * Test whether a result item can be activated.\r\n */\r\n function canActivate(result) {\r\n return result.type === 'item' && result.item.isEnabled;\r\n }\r\n Private.canActivate = canActivate;\r\n /**\r\n * Normalize a category for a command item.\r\n */\r\n function normalizeCategory(category) {\r\n return category.trim().replace(/\\s+/g, ' ');\r\n }\r\n /**\r\n * Normalize the query text for a fuzzy search.\r\n */\r\n function normalizeQuery(text) {\r\n return text.replace(/\\s+/g, '').toLowerCase();\r\n }\r\n /**\r\n * Perform a fuzzy match on an array of command items.\r\n */\r\n function matchItems(items, query) {\r\n // Normalize the query text to lower case with no whitespace.\r\n query = normalizeQuery(query);\r\n // Create the array to hold the scores.\r\n var scores = [];\r\n // Iterate over the items and match against the query.\r\n for (var i = 0, n = items.length; i < n; ++i) {\r\n // Ignore items which are not visible.\r\n var item = items[i];\r\n if (!item.isVisible) {\r\n continue;\r\n }\r\n // If the query is empty, all items are matched by default.\r\n if (!query) {\r\n scores.push({\r\n matchType: 3 /* Default */,\r\n categoryIndices: null,\r\n labelIndices: null,\r\n score: 0, item: item\r\n });\r\n continue;\r\n }\r\n // Run the fuzzy search for the item and query.\r\n var score = fuzzySearch(item, query);\r\n // Ignore the item if it is not a match.\r\n if (!score) {\r\n continue;\r\n }\r\n // Penalize disabled items.\r\n // TODO - push disabled items all the way down in sort cmp?\r\n if (!item.isEnabled) {\r\n score.score += 1000;\r\n }\r\n // Add the score to the results.\r\n scores.push(score);\r\n }\r\n // Return the final array of scores.\r\n return scores;\r\n }\r\n /**\r\n * Perform a fuzzy search on a single command item.\r\n */\r\n function fuzzySearch(item, query) {\r\n // Create the source text to be searched.\r\n var category = item.category.toLowerCase();\r\n var label = item.label.toLowerCase();\r\n var source = category + \" \" + label;\r\n // Set up the match score and indices array.\r\n var score = Infinity;\r\n var indices = null;\r\n // The regex for search word boundaries\r\n var rgx = /\\b\\w/g;\r\n // Search the source by word boundary.\r\n while (true) {\r\n // Find the next word boundary in the source.\r\n var rgxMatch = rgx.exec(source);\r\n // Break if there is no more source context.\r\n if (!rgxMatch) {\r\n break;\r\n }\r\n // Run the string match on the relevant substring.\r\n var match = algorithm_1.StringExt.matchSumOfDeltas(source, query, rgxMatch.index);\r\n // Break if there is no match.\r\n if (!match) {\r\n break;\r\n }\r\n // Update the match if the score is better.\r\n if (match && match.score <= score) {\r\n score = match.score;\r\n indices = match.indices;\r\n }\r\n }\r\n // Bail if there was no match.\r\n if (!indices || score === Infinity) {\r\n return null;\r\n }\r\n // Compute the pivot index between category and label text.\r\n var pivot = category.length + 1;\r\n // Find the slice index to separate matched indices.\r\n var j = algorithm_1.ArrayExt.lowerBound(indices, pivot, function (a, b) { return a - b; });\r\n // Extract the matched category and label indices.\r\n var categoryIndices = indices.slice(0, j);\r\n var labelIndices = indices.slice(j);\r\n // Adjust the label indices for the pivot offset.\r\n for (var i = 0, n = labelIndices.length; i < n; ++i) {\r\n labelIndices[i] -= pivot;\r\n }\r\n // Handle a pure label match.\r\n if (categoryIndices.length === 0) {\r\n return {\r\n matchType: 0 /* Label */,\r\n categoryIndices: null,\r\n labelIndices: labelIndices,\r\n score: score, item: item\r\n };\r\n }\r\n // Handle a pure category match.\r\n if (labelIndices.length === 0) {\r\n return {\r\n matchType: 1 /* Category */,\r\n categoryIndices: categoryIndices,\r\n labelIndices: null,\r\n score: score, item: item\r\n };\r\n }\r\n // Handle a split match.\r\n return {\r\n matchType: 2 /* Split */,\r\n categoryIndices: categoryIndices,\r\n labelIndices: labelIndices,\r\n score: score, item: item\r\n };\r\n }\r\n /**\r\n * A sort comparison function for a match score.\r\n */\r\n function scoreCmp(a, b) {\r\n // First compare based on the match type\r\n var m1 = a.matchType - b.matchType;\r\n if (m1 !== 0) {\r\n return m1;\r\n }\r\n // Otherwise, compare based on the match score.\r\n var d1 = a.score - b.score;\r\n if (d1 !== 0) {\r\n return d1;\r\n }\r\n // Find the match index based on the match type.\r\n var i1 = 0;\r\n var i2 = 0;\r\n switch (a.matchType) {\r\n case 0 /* Label */:\r\n i1 = a.labelIndices[0];\r\n i2 = b.labelIndices[0];\r\n break;\r\n case 1 /* Category */:\r\n case 2 /* Split */:\r\n i1 = a.categoryIndices[0];\r\n i2 = b.categoryIndices[0];\r\n break;\r\n }\r\n // Compare based on the match index.\r\n if (i1 !== i2) {\r\n return i1 - i2;\r\n }\r\n // Otherwise, compare by category.\r\n var d2 = a.item.category.localeCompare(b.item.category);\r\n if (d2 !== 0) {\r\n return d2;\r\n }\r\n // Otherwise, compare by rank.\r\n var r1 = a.item.rank;\r\n var r2 = b.item.rank;\r\n if (r1 !== r2) {\r\n return r1 < r2 ? -1 : 1; // Infinity safe\r\n }\r\n // Finally, compare by label.\r\n return a.item.label.localeCompare(b.item.label);\r\n }\r\n /**\r\n * Create the results from an array of sorted scores.\r\n */\r\n function createResults(scores) {\r\n // Set up an array to track which scores have been visited.\r\n var visited = new Array(scores.length);\r\n algorithm_1.ArrayExt.fill(visited, false);\r\n // Set up the search results array.\r\n var results = [];\r\n // Iterate over each score in the array.\r\n for (var i = 0, n = scores.length; i < n; ++i) {\r\n // Ignore a score which has already been processed.\r\n if (visited[i]) {\r\n continue;\r\n }\r\n // Extract the current item and indices.\r\n var _a = scores[i], item = _a.item, categoryIndices = _a.categoryIndices;\r\n // Extract the category for the current item.\r\n var category = item.category;\r\n // Add the header result for the category.\r\n results.push({ type: 'header', category: category, indices: categoryIndices });\r\n // Find the rest of the scores with the same category.\r\n for (var j = i; j < n; ++j) {\r\n // Ignore a score which has already been processed.\r\n if (visited[j]) {\r\n continue;\r\n }\r\n // Extract the data for the current score.\r\n var _b = scores[j], item_1 = _b.item, labelIndices = _b.labelIndices;\r\n // Ignore an item with a different category.\r\n if (item_1.category !== category) {\r\n continue;\r\n }\r\n // Create the item result for the score.\r\n results.push({ type: 'item', item: item_1, indices: labelIndices });\r\n // Mark the score as processed.\r\n visited[j] = true;\r\n }\r\n }\r\n // Return the final results.\r\n return results;\r\n }\r\n /**\r\n * A concrete implementation of `CommandPalette.IItem`.\r\n */\r\n var CommandItem = /** @class */ (function () {\r\n /**\r\n * Construct a new command item.\r\n */\r\n function CommandItem(commands, options) {\r\n this._commands = commands;\r\n this.category = normalizeCategory(options.category);\r\n this.command = options.command;\r\n this.args = options.args || coreutils_1.JSONExt.emptyObject;\r\n this.rank = options.rank !== undefined ? options.rank : Infinity;\r\n }\r\n Object.defineProperty(CommandItem.prototype, \"label\", {\r\n /**\r\n * The display label for the command item.\r\n */\r\n get: function () {\r\n return this._commands.label(this.command, this.args);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandItem.prototype, \"iconClass\", {\r\n /**\r\n * The icon class for the command item.\r\n */\r\n get: function () {\r\n return this._commands.iconClass(this.command, this.args);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandItem.prototype, \"iconLabel\", {\r\n /**\r\n * The icon label for the command item.\r\n */\r\n get: function () {\r\n return this._commands.iconLabel(this.command, this.args);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandItem.prototype, \"caption\", {\r\n /**\r\n * The display caption for the command item.\r\n */\r\n get: function () {\r\n return this._commands.caption(this.command, this.args);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandItem.prototype, \"className\", {\r\n /**\r\n * The extra class name for the command item.\r\n */\r\n get: function () {\r\n return this._commands.className(this.command, this.args);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandItem.prototype, \"dataset\", {\r\n /**\r\n * The dataset for the command item.\r\n */\r\n get: function () {\r\n return this._commands.dataset(this.command, this.args);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandItem.prototype, \"isEnabled\", {\r\n /**\r\n * Whether the command item is enabled.\r\n */\r\n get: function () {\r\n return this._commands.isEnabled(this.command, this.args);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandItem.prototype, \"isToggled\", {\r\n /**\r\n * Whether the command item is toggled.\r\n */\r\n get: function () {\r\n return this._commands.isToggled(this.command, this.args);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandItem.prototype, \"isVisible\", {\r\n /**\r\n * Whether the command item is visible.\r\n */\r\n get: function () {\r\n return this._commands.isVisible(this.command, this.args);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CommandItem.prototype, \"keyBinding\", {\r\n /**\r\n * The key binding for the command item.\r\n */\r\n get: function () {\r\n var _a = this, command = _a.command, args = _a.args;\r\n return algorithm_1.ArrayExt.findLastValue(this._commands.keyBindings, function (kb) {\r\n return kb.command === command && coreutils_1.JSONExt.deepEqual(kb.args, args);\r\n }) || null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return CommandItem;\r\n }());\r\n})(Private || (Private = {}));\r\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The namespace for JSON-specific functions.\n */\nvar JSONExt;\n(function (JSONExt) {\n /**\n * A shared frozen empty JSONObject\n */\n JSONExt.emptyObject = Object.freeze({});\n /**\n * A shared frozen empty JSONArray\n */\n JSONExt.emptyArray = Object.freeze([]);\n /**\n * Test whether a JSON value is a primitive.\n *\n * @param value - The JSON value of interest.\n *\n * @returns `true` if the value is a primitive,`false` otherwise.\n */\n function isPrimitive(value) {\n return (value === null ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string');\n }\n JSONExt.isPrimitive = isPrimitive;\n function isArray(value) {\n return Array.isArray(value);\n }\n JSONExt.isArray = isArray;\n function isObject(value) {\n return !isPrimitive(value) && !isArray(value);\n }\n JSONExt.isObject = isObject;\n /**\n * Compare two JSON values for deep equality.\n *\n * @param first - The first JSON value of interest.\n *\n * @param second - The second JSON value of interest.\n *\n * @returns `true` if the values are equivalent, `false` otherwise.\n */\n function deepEqual(first, second) {\n // Check referential and primitive equality first.\n if (first === second) {\n return true;\n }\n // If one is a primitive, the `===` check ruled out the other.\n if (isPrimitive(first) || isPrimitive(second)) {\n return false;\n }\n // Test whether they are arrays.\n var a1 = isArray(first);\n var a2 = isArray(second);\n // Bail if the types are different.\n if (a1 !== a2) {\n return false;\n }\n // If they are both arrays, compare them.\n if (a1 && a2) {\n return deepArrayEqual(first, second);\n }\n // At this point, they must both be objects.\n return deepObjectEqual(first, second);\n }\n JSONExt.deepEqual = deepEqual;\n /**\n * Create a deep copy of a JSON value.\n *\n * @param value - The JSON value to copy.\n *\n * @returns A deep copy of the given JSON value.\n */\n function deepCopy(value) {\n // Do nothing for primitive values.\n if (isPrimitive(value)) {\n return value;\n }\n // Deep copy an array.\n if (isArray(value)) {\n return deepArrayCopy(value);\n }\n // Deep copy an object.\n return deepObjectCopy(value);\n }\n JSONExt.deepCopy = deepCopy;\n /**\n * Compare two JSON arrays for deep equality.\n */\n function deepArrayEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Test the arrays for equal length.\n if (first.length !== second.length) {\n return false;\n }\n // Compare the values for equality.\n for (var i = 0, n = first.length; i < n; ++i) {\n if (!deepEqual(first[i], second[i])) {\n return false;\n }\n }\n // At this point, the arrays are equal.\n return true;\n }\n /**\n * Compare two JSON objects for deep equality.\n */\n function deepObjectEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Check for the first object's keys in the second object.\n for (var key in first) {\n if (!(key in second)) {\n return false;\n }\n }\n // Check for the second object's keys in the first object.\n for (var key in second) {\n if (!(key in first)) {\n return false;\n }\n }\n // Compare the values for equality.\n for (var key in first) {\n if (!deepEqual(first[key], second[key])) {\n return false;\n }\n }\n // At this point, the objects are equal.\n return true;\n }\n /**\n * Create a deep copy of a JSON array.\n */\n function deepArrayCopy(value) {\n var result = new Array(value.length);\n for (var i = 0, n = value.length; i < n; ++i) {\n result[i] = deepCopy(value[i]);\n }\n return result;\n }\n /**\n * Create a deep copy of a JSON object.\n */\n function deepObjectCopy(value) {\n var result = {};\n for (var key in value) {\n result[key] = deepCopy(value[key]);\n }\n return result;\n }\n})(JSONExt = exports.JSONExt || (exports.JSONExt = {}));\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * An object which stores MIME data for general application use.\n *\n * #### Notes\n * This class does not attempt to enforce \"correctness\" of MIME types\n * and their associated data. Since this class is designed to transfer\n * arbitrary data and objects within the same application, it assumes\n * that the user provides correct and accurate data.\n */\nvar MimeData = /** @class */ (function () {\n function MimeData() {\n this._types = [];\n this._values = [];\n }\n /**\n * Get an array of the MIME types contained within the dataset.\n *\n * @returns A new array of the MIME types, in order of insertion.\n */\n MimeData.prototype.types = function () {\n return this._types.slice();\n };\n /**\n * Test whether the dataset has an entry for the given type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns `true` if the dataset contains a value for the given\n * MIME type, `false` otherwise.\n */\n MimeData.prototype.hasData = function (mime) {\n return this._types.indexOf(mime) !== -1;\n };\n /**\n * Get the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns The value for the given MIME type, or `undefined` if\n * the dataset does not contain a value for the type.\n */\n MimeData.prototype.getData = function (mime) {\n var i = this._types.indexOf(mime);\n return i !== -1 ? this._values[i] : undefined;\n };\n /**\n * Set the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @param data - The data value for the given MIME type.\n *\n * #### Notes\n * This will overwrite any previous entry for the MIME type.\n */\n MimeData.prototype.setData = function (mime, data) {\n this.clearData(mime);\n this._types.push(mime);\n this._values.push(data);\n };\n /**\n * Remove the data entry for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * #### Notes\n * This is a no-op if there is no entry for the given MIME type.\n */\n MimeData.prototype.clearData = function (mime) {\n var i = this._types.indexOf(mime);\n if (i !== -1) {\n this._types.splice(i, 1);\n this._values.splice(i, 1);\n }\n };\n /**\n * Remove all data entries from the dataset.\n */\n MimeData.prototype.clear = function () {\n this._types.length = 0;\n this._values.length = 0;\n };\n return MimeData;\n}());\nexports.MimeData = MimeData;\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A class which wraps a promise into a delegate object.\n *\n * #### Notes\n * This class is useful when the logic to resolve or reject a promise\n * cannot be defined at the point where the promise is created.\n */\nvar PromiseDelegate = /** @class */ (function () {\n /**\n * Construct a new promise delegate.\n */\n function PromiseDelegate() {\n var _this = this;\n this.promise = new Promise(function (resolve, reject) {\n _this._resolve = resolve;\n _this._reject = reject;\n });\n }\n /**\n * Resolve the wrapped promise with the given value.\n *\n * @param value - The value to use for resolving the promise.\n */\n PromiseDelegate.prototype.resolve = function (value) {\n var resolve = this._resolve;\n resolve(value);\n };\n /**\n * Reject the wrapped promise with the given value.\n *\n * @reason - The reason for rejecting the promise.\n */\n PromiseDelegate.prototype.reject = function (reason) {\n var reject = this._reject;\n reject(reason);\n };\n return PromiseDelegate;\n}());\nexports.PromiseDelegate = PromiseDelegate;\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","module.exports = require('./lib/_stream_writable.js');\n","module.exports = require('./lib/_stream_duplex.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./readable').PassThrough\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","module.exports = require('./browser/algorithms.json')\n","var checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n 'sha': 'SHA-1',\n 'sha-1': 'SHA-1',\n 'sha1': 'SHA-1',\n 'sha256': 'SHA-256',\n 'sha-256': 'SHA-256',\n 'sha384': 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n 'sha512': 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n process.nextTick(function () {\n callback(null, out)\n })\n }, function (e) {\n process.nextTick(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n return process.nextTick(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n }\n\n checkParameters(password, salt, iterations, keylen)\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar utils = des.utils;\nvar Cipher = des.Cipher;\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar Cipher = des.Cipher;\nvar DES = des.DES;\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var createHash = require('create-hash')\nvar stream = require('stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = new Buffer(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = new Buffer(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = new Buffer(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = new Buffer(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [ 0, 1 ]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return new Buffer(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [ 0 ].concat(r)\n if (s[0] & 0x80) s = [ 0 ].concat(s)\n\n var total = r.length + s.length + 4\n var res = [ 0x30, total, 0x02, r.length ]\n res = res.concat(r, [ 0x02, s.length ], s)\n return new Buffer(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = new Buffer(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = new Buffer(q.byteLength() - x.length)\n zeros.fill(0)\n x = Buffer.concat([ zeros, x ])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = new Buffer(hlen)\n v.fill(1)\n var k = new Buffer(hlen)\n k.fill(0)\n k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = new Buffer(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = new Buffer(q.byteLength() - out.length)\n zeros.fill(0)\n out = Buffer.concat([ zeros, out ])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = new Buffer(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([ t, kv.v ])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n var naf = [];\n var ws = 1 << (w + 1);\n var k = num.clone();\n while (k.cmpn(1) >= 0) {\n var z;\n if (k.isOdd()) {\n var mod = k.andln(ws - 1);\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n naf.push(z);\n\n // Optimization, shift by word if possible\n var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n for (var i = 1; i < shift; i++)\n naf.push(0);\n k.iushrn(shift);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a]);\n naf[b] = getNAF(coeffs[b], wndWidth[b]);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar curve = require('../curve');\nvar elliptic = require('../../elliptic');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curve = require('../curve');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar curve = require('../curve');\nvar elliptic = require('../../elliptic');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n if (this.curve.twisted) {\n // E = a * C\n var e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n var h = this.z.redSqr();\n // J = F - 2 * H\n var j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n var e = c.redAdd(d);\n // H = (c * Z1)^2\n var h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n var j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar elliptic = require('../elliptic');\n\nvar assert = elliptic.utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new elliptic.curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new elliptic.curve.edwards(options);\n else\n this.curve = new elliptic.curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n ]\n ]\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n ]\n ]\n }\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n options = elliptic.curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof elliptic.curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray()\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n do {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8'\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; true; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n\n if (!this.curve._maxwellTrick) {\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n }\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0 && (r[1] & 0x80)) {\n r = r.slice(1);\n }\n if (s[0] === 0 && (s[1] & 0x80)) {\n s = s.slice(1);\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n var curve = elliptic.curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength)\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = require('vm').runInThisContext(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","var indexOf = function (xs, item) {\n if (xs.indexOf) return xs.indexOf(item);\n else for (var i = 0; i < xs.length; i++) {\n if (xs[i] === item) return i;\n }\n return -1;\n};\nvar Object_keys = function (obj) {\n if (Object.keys) return Object.keys(obj)\n else {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n }\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nvar defineProp = (function() {\n try {\n Object.defineProperty({}, '_', {});\n return function(obj, name, value) {\n Object.defineProperty(obj, name, {\n writable: true,\n enumerable: false,\n configurable: true,\n value: value\n })\n };\n } catch(e) {\n return function(obj, name, value) {\n obj[name] = value;\n };\n }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n if (!(this instanceof Script)) return new Script(code);\n this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n if (!(context instanceof Context)) {\n throw new TypeError(\"needs a 'context' argument.\");\n }\n \n var iframe = document.createElement('iframe');\n if (!iframe.style) iframe.style = {};\n iframe.style.display = 'none';\n \n document.body.appendChild(iframe);\n \n var win = iframe.contentWindow;\n var wEval = win.eval, wExecScript = win.execScript;\n\n if (!wEval && wExecScript) {\n // win.eval() magically appears when this is called in IE:\n wExecScript.call(win, 'null');\n wEval = win.eval;\n }\n \n forEach(Object_keys(context), function (key) {\n win[key] = context[key];\n });\n forEach(globals, function (key) {\n if (context[key]) {\n win[key] = context[key];\n }\n });\n \n var winKeys = Object_keys(win);\n\n var res = wEval.call(win, this.code);\n \n forEach(Object_keys(win), function (key) {\n // Avoid copying circular objects like `top` and `window` by only\n // updating existing context properties or new properties in the `win`\n // that was only introduced after the eval.\n if (key in context || indexOf(winKeys, key) === -1) {\n context[key] = win[key];\n }\n });\n\n forEach(globals, function (key) {\n if (!(key in context)) {\n defineProp(context, key, win[key]);\n }\n });\n \n document.body.removeChild(iframe);\n \n return res;\n};\n\nScript.prototype.runInThisContext = function () {\n return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n var ctx = Script.createContext(context);\n var res = this.runInContext(ctx);\n\n if (context) {\n forEach(Object_keys(ctx), function (key) {\n context[key] = ctx[key];\n });\n }\n\n return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n exports[name] = Script[name] = function (code) {\n var s = Script(code);\n return s[name].apply(s, [].slice.call(arguments, 1));\n };\n});\n\nexports.isContext = function (context) {\n return context instanceof Context;\n};\n\nexports.createScript = function (code) {\n return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n var copy = new Context();\n if(typeof context === 'object') {\n forEach(Object_keys(context), function (key) {\n copy[key] = context[key];\n });\n }\n return copy;\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var constants = require('../constants');\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = new Buffer(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [ 1 ]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = new Buffer(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = new Buffer(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","\"use strict\";\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A runtime object which captures compile-time type information.\n *\n * #### Notes\n * A token captures the compile-time type of an interface or class in\n * an object which can be used at runtime in a type-safe fashion.\n */\nvar Token = /** @class */ (function () {\n /**\n * Construct a new token.\n *\n * @param name - A human readable name for the token.\n */\n function Token(name) {\n this.name = name;\n this._tokenStructuralPropertyT = null;\n }\n return Token;\n}());\nexports.Token = Token;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nvar random_1 = require(\"./random\");\n/**\n * The namespace for UUID related functionality.\n */\nvar UUID;\n(function (UUID) {\n /**\n * A function which generates UUID v4 identifiers.\n *\n * @returns A new UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n UUID.uuid4 = (function () {\n // Create a 16 byte array to hold the random values.\n var bytes = new Uint8Array(16);\n // Create a look up table from bytes to hex strings.\n var lut = new Array(256);\n // Pad the single character hex digits with a leading zero.\n for (var i = 0; i < 16; ++i) {\n lut[i] = '0' + i.toString(16);\n }\n // Populate the rest of the hex digits.\n for (var i = 16; i < 256; ++i) {\n lut[i] = i.toString(16);\n }\n // Return a function which generates the UUID.\n return function uuid4() {\n // Get a new batch of random values.\n random_1.Random.getRandomValues(bytes);\n // Set the UUID version number to 4.\n bytes[6] = 0x40 | (bytes[6] & 0x0F);\n // Set the clock sequence bit to the RFC spec.\n bytes[8] = 0x80 | (bytes[8] & 0x3F);\n // Assemble the UUID string.\n return (lut[bytes[0]] +\n lut[bytes[1]] +\n lut[bytes[2]] +\n lut[bytes[3]] +\n '-' +\n lut[bytes[4]] +\n lut[bytes[5]] +\n '-' +\n lut[bytes[6]] +\n lut[bytes[7]] +\n '-' +\n lut[bytes[8]] +\n lut[bytes[9]] +\n '-' +\n lut[bytes[10]] +\n lut[bytes[11]] +\n lut[bytes[12]] +\n lut[bytes[13]] +\n lut[bytes[14]] +\n lut[bytes[15]]);\n };\n })();\n})(UUID = exports.UUID || (exports.UUID = {}));\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar disposable_1 = require(\"@phosphor/disposable\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar menu_1 = require(\"./menu\");\r\n/**\r\n * An object which implements a universal context menu.\r\n *\r\n * #### Notes\r\n * The items shown in the context menu are determined by CSS selector\r\n * matching against the DOM hierarchy at the site of the mouse click.\r\n * This is similar in concept to how keyboard shortcuts are matched\r\n * in the command registry.\r\n */\r\nvar ContextMenu = /** @class */ (function () {\r\n /**\r\n * Construct a new context menu.\r\n *\r\n * @param options - The options for initializing the menu.\r\n */\r\n function ContextMenu(options) {\r\n this._idTick = 0;\r\n this._items = [];\r\n this.menu = new menu_1.Menu(options);\r\n }\r\n /**\r\n * Add an item to the context menu.\r\n *\r\n * @param options - The options for creating the item.\r\n *\r\n * @returns A disposable which will remove the item from the menu.\r\n */\r\n ContextMenu.prototype.addItem = function (options) {\r\n var _this = this;\r\n // Create an item from the given options.\r\n var item = Private.createItem(options, this._idTick++);\r\n // Add the item to the internal array.\r\n this._items.push(item);\r\n // Return a disposable which will remove the item.\r\n return new disposable_1.DisposableDelegate(function () {\r\n algorithm_1.ArrayExt.removeFirstOf(_this._items, item);\r\n });\r\n };\r\n /**\r\n * Open the context menu in response to a `'contextmenu'` event.\r\n *\r\n * @param event - The `'contextmenu'` event of interest.\r\n *\r\n * @returns `true` if the menu was opened, or `false` if no items\r\n * matched the event and the menu was not opened.\r\n *\r\n * #### Notes\r\n * This method will populate the context menu with items which match\r\n * the propagation path of the event, then open the menu at the mouse\r\n * position indicated by the event.\r\n */\r\n ContextMenu.prototype.open = function (event) {\r\n var _this = this;\r\n // Clear the current contents of the context menu.\r\n this.menu.clearItems();\r\n // Bail early if there are no items to match.\r\n if (this._items.length === 0) {\r\n return false;\r\n }\r\n // Find the matching items for the event.\r\n var items = Private.matchItems(this._items, event);\r\n // Bail if there are no matching items.\r\n if (!items || items.length === 0) {\r\n return false;\r\n }\r\n // Add the filtered items to the menu.\r\n algorithm_1.each(items, function (item) { _this.menu.addItem(item); });\r\n // Open the context menu at the current mouse position.\r\n this.menu.open(event.clientX, event.clientY);\r\n // Indicate success.\r\n return true;\r\n };\r\n return ContextMenu;\r\n}());\r\nexports.ContextMenu = ContextMenu;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * Create a normalized context menu item from an options object.\r\n */\r\n function createItem(options, id) {\r\n var selector = validateSelector(options.selector);\r\n var rank = options.rank !== undefined ? options.rank : Infinity;\r\n return __assign({}, options, { selector: selector, rank: rank, id: id });\r\n }\r\n Private.createItem = createItem;\r\n /**\r\n * Find the items which match a context menu event.\r\n *\r\n * The results are sorted by DOM level, specificity, and rank.\r\n */\r\n function matchItems(items, event) {\r\n // Look up the target of the event.\r\n var target = event.target;\r\n // Bail if there is no target.\r\n if (!target) {\r\n return null;\r\n }\r\n // Look up the current target of the event.\r\n var currentTarget = event.currentTarget;\r\n // Bail if there is no current target.\r\n if (!currentTarget) {\r\n return null;\r\n }\r\n // There are some third party libraries that cause the `target` to\r\n // be detached from the DOM before Phosphor can process the event.\r\n // If that happens, search for a new target node by point. If that\r\n // node is still dangling, bail.\r\n if (!currentTarget.contains(target)) {\r\n target = document.elementFromPoint(event.clientX, event.clientY);\r\n if (!target || !currentTarget.contains(target)) {\r\n return null;\r\n }\r\n }\r\n // Set up the result array.\r\n var result = [];\r\n // Copy the items array to allow in-place modification.\r\n var availableItems = items.slice();\r\n // Walk up the DOM hierarchy searching for matches.\r\n while (target !== null) {\r\n // Set up the match array for this DOM level.\r\n var matches = [];\r\n // Search the remaining items for matches.\r\n for (var i = 0, n = availableItems.length; i < n; ++i) {\r\n // Fetch the item.\r\n var item = availableItems[i];\r\n // Skip items which are already consumed.\r\n if (!item) {\r\n continue;\r\n }\r\n // Skip items which do not match the element.\r\n if (!domutils_1.Selector.matches(target, item.selector)) {\r\n continue;\r\n }\r\n // Add the matched item to the result for this DOM level.\r\n matches.push(item);\r\n // Mark the item as consumed.\r\n availableItems[i] = null;\r\n }\r\n // Sort the matches for this level and add them to the results.\r\n if (matches.length !== 0) {\r\n matches.sort(itemCmp);\r\n result.push.apply(result, matches);\r\n }\r\n // Stop searching at the limits of the DOM range.\r\n if (target === currentTarget) {\r\n break;\r\n }\r\n // Step to the parent DOM level.\r\n target = target.parentElement;\r\n }\r\n // Return the matched and sorted results.\r\n return result;\r\n }\r\n Private.matchItems = matchItems;\r\n /**\r\n * Validate the selector for a menu item.\r\n *\r\n * This returns the validated selector, or throws if the selector is\r\n * invalid or contains commas.\r\n */\r\n function validateSelector(selector) {\r\n if (selector.indexOf(',') !== -1) {\r\n throw new Error(\"Selector cannot contain commas: \" + selector);\r\n }\r\n if (!domutils_1.Selector.isValid(selector)) {\r\n throw new Error(\"Invalid selector: \" + selector);\r\n }\r\n return selector;\r\n }\r\n /**\r\n * A sort comparison function for a context menu item.\r\n */\r\n function itemCmp(a, b) {\r\n // Sort first based on selector specificity.\r\n var s1 = domutils_1.Selector.calculateSpecificity(a.selector);\r\n var s2 = domutils_1.Selector.calculateSpecificity(b.selector);\r\n if (s1 !== s2) {\r\n return s2 - s1;\r\n }\r\n // If specificities are equal, sort based on rank.\r\n var r1 = a.rank;\r\n var r2 = b.rank;\r\n if (r1 !== r2) {\r\n return r1 < r2 ? -1 : 1; // Infinity-safe\r\n }\r\n // When all else fails, sort by item id.\r\n return a.id - b.id;\r\n }\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar coreutils_1 = require(\"@phosphor/coreutils\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar dragdrop_1 = require(\"@phosphor/dragdrop\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar properties_1 = require(\"@phosphor/properties\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\nvar docklayout_1 = require(\"./docklayout\");\r\nvar tabbar_1 = require(\"./tabbar\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A widget which provides a flexible docking area for widgets.\r\n */\r\nvar DockPanel = /** @class */ (function (_super) {\r\n __extends(DockPanel, _super);\r\n /**\r\n * Construct a new dock panel.\r\n *\r\n * @param options - The options for initializing the panel.\r\n */\r\n function DockPanel(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this) || this;\r\n _this._drag = null;\r\n _this._pressData = null;\r\n _this._layoutModified = new signaling_1.Signal(_this);\r\n _this.addClass('p-DockPanel');\r\n _this._mode = options.mode || 'multiple-document';\r\n _this._renderer = options.renderer || DockPanel.defaultRenderer;\r\n _this._edges = options.edges || Private.DEFAULT_EDGES;\r\n // Toggle the CSS mode attribute.\r\n _this.dataset['mode'] = _this._mode;\r\n // Create the delegate renderer for the layout.\r\n var renderer = {\r\n createTabBar: function () { return _this._createTabBar(); },\r\n createHandle: function () { return _this._createHandle(); }\r\n };\r\n // Set up the dock layout for the panel.\r\n _this.layout = new docklayout_1.DockLayout({ renderer: renderer, spacing: options.spacing });\r\n // Set up the overlay drop indicator.\r\n _this.overlay = options.overlay || new DockPanel.Overlay();\r\n _this.node.appendChild(_this.overlay.node);\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the panel.\r\n */\r\n DockPanel.prototype.dispose = function () {\r\n // Ensure the mouse is released.\r\n this._releaseMouse();\r\n // Hide the overlay.\r\n this.overlay.hide(0);\r\n // Cancel a drag if one is in progress.\r\n if (this._drag) {\r\n this._drag.dispose();\r\n }\r\n // Dispose of the base class.\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(DockPanel.prototype, \"layoutModified\", {\r\n /**\r\n * A signal emitted when the layout configuration is modified.\r\n *\r\n * #### Notes\r\n * This signal is emitted whenever the current layout configuration\r\n * may have changed.\r\n *\r\n * This signal is emitted asynchronously in a collapsed fashion, so\r\n * that multiple synchronous modifications results in only a single\r\n * emit of the signal.\r\n */\r\n get: function () {\r\n return this._layoutModified;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DockPanel.prototype, \"renderer\", {\r\n /**\r\n * The renderer used by the dock panel.\r\n */\r\n get: function () {\r\n return this.layout.renderer;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DockPanel.prototype, \"spacing\", {\r\n /**\r\n * Get the spacing between the widgets.\r\n */\r\n get: function () {\r\n return this.layout.spacing;\r\n },\r\n /**\r\n * Set the spacing between the widgets.\r\n */\r\n set: function (value) {\r\n this.layout.spacing = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DockPanel.prototype, \"mode\", {\r\n /**\r\n * Get the mode for the dock panel.\r\n */\r\n get: function () {\r\n return this._mode;\r\n },\r\n /**\r\n * Set the mode for the dock panel.\r\n *\r\n * #### Notes\r\n * Changing the mode is a destructive operation with respect to the\r\n * panel's layout configuration. If layout state must be preserved,\r\n * save the current layout config before changing the mode.\r\n */\r\n set: function (value) {\r\n // Bail early if the mode does not change.\r\n if (this._mode === value) {\r\n return;\r\n }\r\n // Update the internal mode.\r\n this._mode = value;\r\n // Toggle the CSS mode attribute.\r\n this.dataset['mode'] = value;\r\n // Get the layout for the panel.\r\n var layout = this.layout;\r\n // Configure the layout for the specified mode.\r\n switch (value) {\r\n case 'multiple-document':\r\n algorithm_1.each(layout.tabBars(), function (tabBar) { tabBar.show(); });\r\n break;\r\n case 'single-document':\r\n layout.restoreLayout(Private.createSingleDocumentConfig(this));\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n // Schedule an emit of the layout modified signal.\r\n messaging_1.MessageLoop.postMessage(this, Private.LayoutModified);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DockPanel.prototype, \"isEmpty\", {\r\n /**\r\n * Whether the dock panel is empty.\r\n */\r\n get: function () {\r\n return this.layout.isEmpty;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Create an iterator over the user widgets in the panel.\r\n *\r\n * @returns A new iterator over the user widgets in the panel.\r\n *\r\n * #### Notes\r\n * This iterator does not include the generated tab bars.\r\n */\r\n DockPanel.prototype.widgets = function () {\r\n return this.layout.widgets();\r\n };\r\n /**\r\n * Create an iterator over the selected widgets in the panel.\r\n *\r\n * @returns A new iterator over the selected user widgets.\r\n *\r\n * #### Notes\r\n * This iterator yields the widgets corresponding to the current tab\r\n * of each tab bar in the panel.\r\n */\r\n DockPanel.prototype.selectedWidgets = function () {\r\n return this.layout.selectedWidgets();\r\n };\r\n /**\r\n * Create an iterator over the tab bars in the panel.\r\n *\r\n * @returns A new iterator over the tab bars in the panel.\r\n *\r\n * #### Notes\r\n * This iterator does not include the user widgets.\r\n */\r\n DockPanel.prototype.tabBars = function () {\r\n return this.layout.tabBars();\r\n };\r\n /**\r\n * Create an iterator over the handles in the panel.\r\n *\r\n * @returns A new iterator over the handles in the panel.\r\n */\r\n DockPanel.prototype.handles = function () {\r\n return this.layout.handles();\r\n };\r\n /**\r\n * Select a specific widget in the dock panel.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * #### Notes\r\n * This will make the widget the current widget in its tab area.\r\n */\r\n DockPanel.prototype.selectWidget = function (widget) {\r\n // Find the tab bar which contains the widget.\r\n var tabBar = algorithm_1.find(this.tabBars(), function (bar) {\r\n return bar.titles.indexOf(widget.title) !== -1;\r\n });\r\n // Throw an error if no tab bar is found.\r\n if (!tabBar) {\r\n throw new Error('Widget is not contained in the dock panel.');\r\n }\r\n // Ensure the widget is the current widget.\r\n tabBar.currentTitle = widget.title;\r\n };\r\n /**\r\n * Activate a specified widget in the dock panel.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * #### Notes\r\n * This will select and activate the given widget.\r\n */\r\n DockPanel.prototype.activateWidget = function (widget) {\r\n this.selectWidget(widget);\r\n widget.activate();\r\n };\r\n /**\r\n * Save the current layout configuration of the dock panel.\r\n *\r\n * @returns A new config object for the current layout state.\r\n *\r\n * #### Notes\r\n * The return value can be provided to the `restoreLayout` method\r\n * in order to restore the layout to its current configuration.\r\n */\r\n DockPanel.prototype.saveLayout = function () {\r\n return this.layout.saveLayout();\r\n };\r\n /**\r\n * Restore the layout to a previously saved configuration.\r\n *\r\n * @param config - The layout configuration to restore.\r\n *\r\n * #### Notes\r\n * Widgets which currently belong to the layout but which are not\r\n * contained in the config will be unparented.\r\n *\r\n * The dock panel automatically reverts to `'multiple-document'`\r\n * mode when a layout config is restored.\r\n */\r\n DockPanel.prototype.restoreLayout = function (config) {\r\n // Reset the mode.\r\n this._mode = 'multiple-document';\r\n // Restore the layout.\r\n this.layout.restoreLayout(config);\r\n // Flush the message loop on IE and Edge to prevent flicker.\r\n if (domutils_1.Platform.IS_EDGE || domutils_1.Platform.IS_IE) {\r\n messaging_1.MessageLoop.flush();\r\n }\r\n // Schedule an emit of the layout modified signal.\r\n messaging_1.MessageLoop.postMessage(this, Private.LayoutModified);\r\n };\r\n /**\r\n * Add a widget to the dock panel.\r\n *\r\n * @param widget - The widget to add to the dock panel.\r\n *\r\n * @param options - The additional options for adding the widget.\r\n *\r\n * #### Notes\r\n * If the panel is in single document mode, the options are ignored\r\n * and the widget is always added as tab in the hidden tab bar.\r\n */\r\n DockPanel.prototype.addWidget = function (widget, options) {\r\n if (options === void 0) { options = {}; }\r\n // Add the widget to the layout.\r\n if (this._mode === 'single-document') {\r\n this.layout.addWidget(widget);\r\n }\r\n else {\r\n this.layout.addWidget(widget, options);\r\n }\r\n // Schedule an emit of the layout modified signal.\r\n messaging_1.MessageLoop.postMessage(this, Private.LayoutModified);\r\n };\r\n /**\r\n * Process a message sent to the widget.\r\n *\r\n * @param msg - The message sent to the widget.\r\n */\r\n DockPanel.prototype.processMessage = function (msg) {\r\n if (msg.type === 'layout-modified') {\r\n this._layoutModified.emit(undefined);\r\n }\r\n else {\r\n _super.prototype.processMessage.call(this, msg);\r\n }\r\n };\r\n /**\r\n * Handle the DOM events for the dock panel.\r\n *\r\n * @param event - The DOM event sent to the panel.\r\n *\r\n * #### Notes\r\n * This method implements the DOM `EventListener` interface and is\r\n * called in response to events on the panel's DOM node. It should\r\n * not be called directly by user code.\r\n */\r\n DockPanel.prototype.handleEvent = function (event) {\r\n switch (event.type) {\r\n case 'p-dragenter':\r\n this._evtDragEnter(event);\r\n break;\r\n case 'p-dragleave':\r\n this._evtDragLeave(event);\r\n break;\r\n case 'p-dragover':\r\n this._evtDragOver(event);\r\n break;\r\n case 'p-drop':\r\n this._evtDrop(event);\r\n break;\r\n case 'mousedown':\r\n this._evtMouseDown(event);\r\n break;\r\n case 'mousemove':\r\n this._evtMouseMove(event);\r\n break;\r\n case 'mouseup':\r\n this._evtMouseUp(event);\r\n break;\r\n case 'keydown':\r\n this._evtKeyDown(event);\r\n break;\r\n case 'contextmenu':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n DockPanel.prototype.onBeforeAttach = function (msg) {\r\n this.node.addEventListener('p-dragenter', this);\r\n this.node.addEventListener('p-dragleave', this);\r\n this.node.addEventListener('p-dragover', this);\r\n this.node.addEventListener('p-drop', this);\r\n this.node.addEventListener('mousedown', this);\r\n };\r\n /**\r\n * A message handler invoked on an `'after-detach'` message.\r\n */\r\n DockPanel.prototype.onAfterDetach = function (msg) {\r\n this.node.removeEventListener('p-dragenter', this);\r\n this.node.removeEventListener('p-dragleave', this);\r\n this.node.removeEventListener('p-dragover', this);\r\n this.node.removeEventListener('p-drop', this);\r\n this.node.removeEventListener('mousedown', this);\r\n this._releaseMouse();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-added'` message.\r\n */\r\n DockPanel.prototype.onChildAdded = function (msg) {\r\n // Ignore the generated tab bars.\r\n if (Private.isGeneratedTabBarProperty.get(msg.child)) {\r\n return;\r\n }\r\n // Add the widget class to the child.\r\n msg.child.addClass('p-DockPanel-widget');\r\n };\r\n /**\r\n * A message handler invoked on a `'child-removed'` message.\r\n */\r\n DockPanel.prototype.onChildRemoved = function (msg) {\r\n // Ignore the generated tab bars.\r\n if (Private.isGeneratedTabBarProperty.get(msg.child)) {\r\n return;\r\n }\r\n // Remove the widget class from the child.\r\n msg.child.removeClass('p-DockPanel-widget');\r\n // Schedule an emit of the layout modified signal.\r\n messaging_1.MessageLoop.postMessage(this, Private.LayoutModified);\r\n };\r\n /**\r\n * Handle the `'p-dragenter'` event for the dock panel.\r\n */\r\n DockPanel.prototype._evtDragEnter = function (event) {\r\n // If the factory mime type is present, mark the event as\r\n // handled in order to get the rest of the drag events.\r\n if (event.mimeData.hasData('application/vnd.phosphor.widget-factory')) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n };\r\n /**\r\n * Handle the `'p-dragleave'` event for the dock panel.\r\n */\r\n DockPanel.prototype._evtDragLeave = function (event) {\r\n // Mark the event as handled.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Get the node into which the drag is entering.\r\n var related = event.relatedTarget;\r\n // Hide the overlay if the drag is leaving the dock panel.\r\n if (!related || !this.node.contains(related)) {\r\n this.overlay.hide(0);\r\n }\r\n };\r\n /**\r\n * Handle the `'p-dragover'` event for the dock panel.\r\n */\r\n DockPanel.prototype._evtDragOver = function (event) {\r\n // Mark the event as handled.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Show the drop indicator overlay and update the drop\r\n // action based on the drop target zone under the mouse.\r\n if (this._showOverlay(event.clientX, event.clientY) === 'invalid') {\r\n event.dropAction = 'none';\r\n }\r\n else {\r\n event.dropAction = event.proposedAction;\r\n }\r\n };\r\n /**\r\n * Handle the `'p-drop'` event for the dock panel.\r\n */\r\n DockPanel.prototype._evtDrop = function (event) {\r\n // Mark the event as handled.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Hide the drop indicator overlay.\r\n this.overlay.hide(0);\r\n // Bail if the proposed action is to do nothing.\r\n if (event.proposedAction === 'none') {\r\n event.dropAction = 'none';\r\n return;\r\n }\r\n // Find the drop target under the mouse.\r\n var clientX = event.clientX, clientY = event.clientY;\r\n var _a = Private.findDropTarget(this, clientX, clientY, this._edges), zone = _a.zone, target = _a.target;\r\n // Bail if the drop zone is invalid.\r\n if (zone === 'invalid') {\r\n event.dropAction = 'none';\r\n return;\r\n }\r\n // Bail if the factory mime type has invalid data.\r\n var mimeData = event.mimeData;\r\n var factory = mimeData.getData('application/vnd.phosphor.widget-factory');\r\n if (typeof factory !== 'function') {\r\n event.dropAction = 'none';\r\n return;\r\n }\r\n // Bail if the factory does not produce a widget.\r\n var widget = factory();\r\n if (!(widget instanceof widget_1.Widget)) {\r\n event.dropAction = 'none';\r\n return;\r\n }\r\n // Bail if the widget is an ancestor of the dock panel.\r\n if (widget.contains(this)) {\r\n event.dropAction = 'none';\r\n return;\r\n }\r\n // Find the reference widget for the drop target.\r\n var ref = target ? Private.getDropRef(target.tabBar) : null;\r\n // Add the widget according to the indicated drop zone.\r\n switch (zone) {\r\n case 'root-all':\r\n this.addWidget(widget);\r\n break;\r\n case 'root-top':\r\n this.addWidget(widget, { mode: 'split-top' });\r\n break;\r\n case 'root-left':\r\n this.addWidget(widget, { mode: 'split-left' });\r\n break;\r\n case 'root-right':\r\n this.addWidget(widget, { mode: 'split-right' });\r\n break;\r\n case 'root-bottom':\r\n this.addWidget(widget, { mode: 'split-bottom' });\r\n break;\r\n case 'widget-all':\r\n this.addWidget(widget, { mode: 'tab-after', ref: ref });\r\n break;\r\n case 'widget-top':\r\n this.addWidget(widget, { mode: 'split-top', ref: ref });\r\n break;\r\n case 'widget-left':\r\n this.addWidget(widget, { mode: 'split-left', ref: ref });\r\n break;\r\n case 'widget-right':\r\n this.addWidget(widget, { mode: 'split-right', ref: ref });\r\n break;\r\n case 'widget-bottom':\r\n this.addWidget(widget, { mode: 'split-bottom', ref: ref });\r\n break;\r\n case 'widget-tab':\r\n this.addWidget(widget, { mode: 'tab-after', ref: ref });\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n // Accept the proposed drop action.\r\n event.dropAction = event.proposedAction;\r\n // Activate the dropped widget.\r\n this.activateWidget(widget);\r\n };\r\n /**\r\n * Handle the `'keydown'` event for the dock panel.\r\n */\r\n DockPanel.prototype._evtKeyDown = function (event) {\r\n // Stop input events during drag.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Release the mouse if `Escape` is pressed.\r\n if (event.keyCode === 27) {\r\n // Finalize the mouse release.\r\n this._releaseMouse();\r\n // Schedule an emit of the layout modified signal.\r\n messaging_1.MessageLoop.postMessage(this, Private.LayoutModified);\r\n }\r\n };\r\n /**\r\n * Handle the `'mousedown'` event for the dock panel.\r\n */\r\n DockPanel.prototype._evtMouseDown = function (event) {\r\n // Do nothing if the left mouse button is not pressed.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Find the handle which contains the mouse target, if any.\r\n var layout = this.layout;\r\n var target = event.target;\r\n var handle = algorithm_1.find(layout.handles(), function (handle) { return handle.contains(target); });\r\n if (!handle) {\r\n return;\r\n }\r\n // Stop the event when a handle is pressed.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Add the extra document listeners.\r\n document.addEventListener('keydown', this, true);\r\n document.addEventListener('mouseup', this, true);\r\n document.addEventListener('mousemove', this, true);\r\n document.addEventListener('contextmenu', this, true);\r\n // Compute the offset deltas for the handle press.\r\n var rect = handle.getBoundingClientRect();\r\n var deltaX = event.clientX - rect.left;\r\n var deltaY = event.clientY - rect.top;\r\n // Override the cursor and store the press data.\r\n var style = window.getComputedStyle(handle);\r\n var override = dragdrop_1.Drag.overrideCursor(style.cursor);\r\n this._pressData = { handle: handle, deltaX: deltaX, deltaY: deltaY, override: override };\r\n };\r\n /**\r\n * Handle the `'mousemove'` event for the dock panel.\r\n */\r\n DockPanel.prototype._evtMouseMove = function (event) {\r\n // Bail early if no drag is in progress.\r\n if (!this._pressData) {\r\n return;\r\n }\r\n // Stop the event when dragging a handle.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Compute the desired offset position for the handle.\r\n var rect = this.node.getBoundingClientRect();\r\n var xPos = event.clientX - rect.left - this._pressData.deltaX;\r\n var yPos = event.clientY - rect.top - this._pressData.deltaY;\r\n // Set the handle as close to the desired position as possible.\r\n var layout = this.layout;\r\n layout.moveHandle(this._pressData.handle, xPos, yPos);\r\n };\r\n /**\r\n * Handle the `'mouseup'` event for the dock panel.\r\n */\r\n DockPanel.prototype._evtMouseUp = function (event) {\r\n // Do nothing if the left mouse button is not released.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Stop the event when releasing a handle.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Finalize the mouse release.\r\n this._releaseMouse();\r\n // Schedule an emit of the layout modified signal.\r\n messaging_1.MessageLoop.postMessage(this, Private.LayoutModified);\r\n };\r\n /**\r\n * Release the mouse grab for the dock panel.\r\n */\r\n DockPanel.prototype._releaseMouse = function () {\r\n // Bail early if no drag is in progress.\r\n if (!this._pressData) {\r\n return;\r\n }\r\n // Clear the override cursor.\r\n this._pressData.override.dispose();\r\n this._pressData = null;\r\n // Remove the extra document listeners.\r\n document.removeEventListener('keydown', this, true);\r\n document.removeEventListener('mouseup', this, true);\r\n document.removeEventListener('mousemove', this, true);\r\n document.removeEventListener('contextmenu', this, true);\r\n };\r\n /**\r\n * Show the overlay indicator at the given client position.\r\n *\r\n * Returns the drop zone at the specified client position.\r\n *\r\n * #### Notes\r\n * If the position is not over a valid zone, the overlay is hidden.\r\n */\r\n DockPanel.prototype._showOverlay = function (clientX, clientY) {\r\n // Find the dock target for the given client position.\r\n var _a = Private.findDropTarget(this, clientX, clientY, this._edges), zone = _a.zone, target = _a.target;\r\n // If the drop zone is invalid, hide the overlay and bail.\r\n if (zone === 'invalid') {\r\n this.overlay.hide(100);\r\n return zone;\r\n }\r\n // Setup the variables needed to compute the overlay geometry.\r\n var top;\r\n var left;\r\n var right;\r\n var bottom;\r\n var box = domutils_1.ElementExt.boxSizing(this.node); // TODO cache this?\r\n var rect = this.node.getBoundingClientRect();\r\n // Compute the overlay geometry based on the dock zone.\r\n switch (zone) {\r\n case 'root-all':\r\n top = box.paddingTop;\r\n left = box.paddingLeft;\r\n right = box.paddingRight;\r\n bottom = box.paddingBottom;\r\n break;\r\n case 'root-top':\r\n top = box.paddingTop;\r\n left = box.paddingLeft;\r\n right = box.paddingRight;\r\n bottom = rect.height * Private.GOLDEN_RATIO;\r\n break;\r\n case 'root-left':\r\n top = box.paddingTop;\r\n left = box.paddingLeft;\r\n right = rect.width * Private.GOLDEN_RATIO;\r\n bottom = box.paddingBottom;\r\n break;\r\n case 'root-right':\r\n top = box.paddingTop;\r\n left = rect.width * Private.GOLDEN_RATIO;\r\n right = box.paddingRight;\r\n bottom = box.paddingBottom;\r\n break;\r\n case 'root-bottom':\r\n top = rect.height * Private.GOLDEN_RATIO;\r\n left = box.paddingLeft;\r\n right = box.paddingRight;\r\n bottom = box.paddingBottom;\r\n break;\r\n case 'widget-all':\r\n top = target.top;\r\n left = target.left;\r\n right = target.right;\r\n bottom = target.bottom;\r\n break;\r\n case 'widget-top':\r\n top = target.top;\r\n left = target.left;\r\n right = target.right;\r\n bottom = target.bottom + target.height / 2;\r\n break;\r\n case 'widget-left':\r\n top = target.top;\r\n left = target.left;\r\n right = target.right + target.width / 2;\r\n bottom = target.bottom;\r\n break;\r\n case 'widget-right':\r\n top = target.top;\r\n left = target.left + target.width / 2;\r\n right = target.right;\r\n bottom = target.bottom;\r\n break;\r\n case 'widget-bottom':\r\n top = target.top + target.height / 2;\r\n left = target.left;\r\n right = target.right;\r\n bottom = target.bottom;\r\n break;\r\n case 'widget-tab':\r\n var tabHeight = target.tabBar.node.getBoundingClientRect().height;\r\n top = target.top;\r\n left = target.left;\r\n right = target.right;\r\n bottom = target.bottom + target.height - tabHeight;\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n // Show the overlay with the computed geometry.\r\n this.overlay.show({ top: top, left: left, right: right, bottom: bottom });\r\n // Finally, return the computed drop zone.\r\n return zone;\r\n };\r\n /**\r\n * Create a new tab bar for use by the panel.\r\n */\r\n DockPanel.prototype._createTabBar = function () {\r\n // Create the tab bar.\r\n var tabBar = this._renderer.createTabBar();\r\n // Set the generated tab bar property for the tab bar.\r\n Private.isGeneratedTabBarProperty.set(tabBar, true);\r\n // Hide the tab bar when in single document mode.\r\n if (this._mode === 'single-document') {\r\n tabBar.hide();\r\n }\r\n // Enforce necessary tab bar behavior.\r\n // TODO do we really want to enforce *all* of these?\r\n tabBar.tabsMovable = true;\r\n tabBar.allowDeselect = false;\r\n tabBar.removeBehavior = 'select-previous-tab';\r\n tabBar.insertBehavior = 'select-tab-if-needed';\r\n // Connect the signal handlers for the tab bar.\r\n tabBar.tabMoved.connect(this._onTabMoved, this);\r\n tabBar.currentChanged.connect(this._onCurrentChanged, this);\r\n tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\r\n tabBar.tabDetachRequested.connect(this._onTabDetachRequested, this);\r\n tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\r\n // Return the initialized tab bar.\r\n return tabBar;\r\n };\r\n /**\r\n * Create a new handle for use by the panel.\r\n */\r\n DockPanel.prototype._createHandle = function () {\r\n return this._renderer.createHandle();\r\n };\r\n /**\r\n * Handle the `tabMoved` signal from a tab bar.\r\n */\r\n DockPanel.prototype._onTabMoved = function () {\r\n messaging_1.MessageLoop.postMessage(this, Private.LayoutModified);\r\n };\r\n /**\r\n * Handle the `currentChanged` signal from a tab bar.\r\n */\r\n DockPanel.prototype._onCurrentChanged = function (sender, args) {\r\n // Extract the previous and current title from the args.\r\n var previousTitle = args.previousTitle, currentTitle = args.currentTitle;\r\n // Hide the previous widget.\r\n if (previousTitle) {\r\n previousTitle.owner.hide();\r\n }\r\n // Show the current widget.\r\n if (currentTitle) {\r\n currentTitle.owner.show();\r\n }\r\n // Flush the message loop on IE and Edge to prevent flicker.\r\n if (domutils_1.Platform.IS_EDGE || domutils_1.Platform.IS_IE) {\r\n messaging_1.MessageLoop.flush();\r\n }\r\n // Schedule an emit of the layout modified signal.\r\n messaging_1.MessageLoop.postMessage(this, Private.LayoutModified);\r\n };\r\n /**\r\n * Handle the `tabActivateRequested` signal from a tab bar.\r\n */\r\n DockPanel.prototype._onTabActivateRequested = function (sender, args) {\r\n args.title.owner.activate();\r\n };\r\n /**\r\n * Handle the `tabCloseRequested` signal from a tab bar.\r\n */\r\n DockPanel.prototype._onTabCloseRequested = function (sender, args) {\r\n args.title.owner.close();\r\n };\r\n /**\r\n * Handle the `tabDetachRequested` signal from a tab bar.\r\n */\r\n DockPanel.prototype._onTabDetachRequested = function (sender, args) {\r\n var _this = this;\r\n // Do nothing if a drag is already in progress.\r\n if (this._drag) {\r\n return;\r\n }\r\n // Release the tab bar's hold on the mouse.\r\n sender.releaseMouse();\r\n // Extract the data from the args.\r\n var title = args.title, tab = args.tab, clientX = args.clientX, clientY = args.clientY;\r\n // Setup the mime data for the drag operation.\r\n var mimeData = new coreutils_1.MimeData();\r\n var factory = function () { return title.owner; };\r\n mimeData.setData('application/vnd.phosphor.widget-factory', factory);\r\n // Create the drag image for the drag operation.\r\n var dragImage = tab.cloneNode(true);\r\n // Create the drag object to manage the drag-drop operation.\r\n this._drag = new dragdrop_1.Drag({\r\n mimeData: mimeData, dragImage: dragImage,\r\n proposedAction: 'move',\r\n supportedActions: 'move',\r\n });\r\n // Hide the tab node in the original tab.\r\n tab.classList.add('p-mod-hidden');\r\n // Create the cleanup callback.\r\n var cleanup = (function () {\r\n _this._drag = null;\r\n tab.classList.remove('p-mod-hidden');\r\n });\r\n // Start the drag operation and cleanup when done.\r\n this._drag.start(clientX, clientY).then(cleanup);\r\n };\r\n return DockPanel;\r\n}(widget_1.Widget));\r\nexports.DockPanel = DockPanel;\r\n/**\r\n * The namespace for the `DockPanel` class statics.\r\n */\r\n(function (DockPanel) {\r\n ;\r\n /**\r\n * A concrete implementation of `IOverlay`.\r\n *\r\n * This is the default overlay implementation for a dock panel.\r\n */\r\n var Overlay = /** @class */ (function () {\r\n /**\r\n * Construct a new overlay.\r\n */\r\n function Overlay() {\r\n this._timer = -1;\r\n this._hidden = true;\r\n this.node = document.createElement('div');\r\n this.node.classList.add('p-DockPanel-overlay');\r\n this.node.classList.add('p-mod-hidden');\r\n this.node.style.position = 'absolute';\r\n }\r\n /**\r\n * Show the overlay using the given overlay geometry.\r\n *\r\n * @param geo - The desired geometry for the overlay.\r\n */\r\n Overlay.prototype.show = function (geo) {\r\n // Update the position of the overlay.\r\n var style = this.node.style;\r\n style.top = geo.top + \"px\";\r\n style.left = geo.left + \"px\";\r\n style.right = geo.right + \"px\";\r\n style.bottom = geo.bottom + \"px\";\r\n // Clear any pending hide timer.\r\n clearTimeout(this._timer);\r\n this._timer = -1;\r\n // If the overlay is already visible, we're done.\r\n if (!this._hidden) {\r\n return;\r\n }\r\n // Clear the hidden flag.\r\n this._hidden = false;\r\n // Finally, show the overlay.\r\n this.node.classList.remove('p-mod-hidden');\r\n };\r\n /**\r\n * Hide the overlay node.\r\n *\r\n * @param delay - The delay (in ms) before hiding the overlay.\r\n * A delay value <= 0 will hide the overlay immediately.\r\n */\r\n Overlay.prototype.hide = function (delay) {\r\n var _this = this;\r\n // Do nothing if the overlay is already hidden.\r\n if (this._hidden) {\r\n return;\r\n }\r\n // Hide immediately if the delay is <= 0.\r\n if (delay <= 0) {\r\n clearTimeout(this._timer);\r\n this._timer = -1;\r\n this._hidden = true;\r\n this.node.classList.add('p-mod-hidden');\r\n return;\r\n }\r\n // Do nothing if a hide is already pending.\r\n if (this._timer !== -1) {\r\n return;\r\n }\r\n // Otherwise setup the hide timer.\r\n this._timer = window.setTimeout(function () {\r\n _this._timer = -1;\r\n _this._hidden = true;\r\n _this.node.classList.add('p-mod-hidden');\r\n }, delay);\r\n };\r\n return Overlay;\r\n }());\r\n DockPanel.Overlay = Overlay;\r\n /**\r\n * The default implementation of `IRenderer`.\r\n */\r\n var Renderer = /** @class */ (function () {\r\n function Renderer() {\r\n }\r\n /**\r\n * Create a new tab bar for use with a dock panel.\r\n *\r\n * @returns A new tab bar for a dock panel.\r\n */\r\n Renderer.prototype.createTabBar = function () {\r\n var bar = new tabbar_1.TabBar();\r\n bar.addClass('p-DockPanel-tabBar');\r\n return bar;\r\n };\r\n /**\r\n * Create a new handle node for use with a dock panel.\r\n *\r\n * @returns A new handle node for a dock panel.\r\n */\r\n Renderer.prototype.createHandle = function () {\r\n var handle = document.createElement('div');\r\n handle.className = 'p-DockPanel-handle';\r\n return handle;\r\n };\r\n return Renderer;\r\n }());\r\n DockPanel.Renderer = Renderer;\r\n /**\r\n * The default `Renderer` instance.\r\n */\r\n DockPanel.defaultRenderer = new Renderer();\r\n})(DockPanel = exports.DockPanel || (exports.DockPanel = {}));\r\nexports.DockPanel = DockPanel;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\r\n */\r\n Private.GOLDEN_RATIO = 0.618;\r\n /**\r\n * The default sizes for the edge drop zones, in pixels.\r\n */\r\n Private.DEFAULT_EDGES = {\r\n /**\r\n * The size of the top edge dock zone for the root panel, in pixels.\r\n * This is different from the others to distinguish between the top\r\n * tab bar and the top root zone.\r\n */\r\n top: 12,\r\n /**\r\n * The size of the edge dock zone for the root panel, in pixels.\r\n */\r\n right: 40,\r\n /**\r\n * The size of the edge dock zone for the root panel, in pixels.\r\n */\r\n bottom: 40,\r\n /**\r\n * The size of the edge dock zone for the root panel, in pixels.\r\n */\r\n left: 40\r\n };\r\n /**\r\n * A singleton `'layout-modified'` conflatable message.\r\n */\r\n Private.LayoutModified = new messaging_1.ConflatableMessage('layout-modified');\r\n /**\r\n * An attached property used to track generated tab bars.\r\n */\r\n Private.isGeneratedTabBarProperty = new properties_1.AttachedProperty({\r\n name: 'isGeneratedTabBar',\r\n create: function () { return false; }\r\n });\r\n /**\r\n * Create a single document config for the widgets in a dock panel.\r\n */\r\n function createSingleDocumentConfig(panel) {\r\n // Return an empty config if the panel is empty.\r\n if (panel.isEmpty) {\r\n return { main: null };\r\n }\r\n // Get a flat array of the widgets in the panel.\r\n var widgets = algorithm_1.toArray(panel.widgets());\r\n // Get the first selected widget in the panel.\r\n var selected = panel.selectedWidgets().next();\r\n // Compute the current index for the new config.\r\n var currentIndex = selected ? widgets.indexOf(selected) : -1;\r\n // Return the single document config.\r\n return { main: { type: 'tab-area', widgets: widgets, currentIndex: currentIndex } };\r\n }\r\n Private.createSingleDocumentConfig = createSingleDocumentConfig;\r\n /**\r\n * Find the drop target at the given client position.\r\n */\r\n function findDropTarget(panel, clientX, clientY, edges) {\r\n // Bail if the mouse is not over the dock panel.\r\n if (!domutils_1.ElementExt.hitTest(panel.node, clientX, clientY)) {\r\n return { zone: 'invalid', target: null };\r\n }\r\n // Look up the layout for the panel.\r\n var layout = panel.layout;\r\n // If the layout is empty, indicate the entire root drop zone.\r\n if (layout.isEmpty) {\r\n return { zone: 'root-all', target: null };\r\n }\r\n // Test the edge zones when in multiple document mode.\r\n if (panel.mode === 'multiple-document') {\r\n // Get the client rect for the dock panel.\r\n var panelRect = panel.node.getBoundingClientRect();\r\n // Compute the distance to each edge of the panel.\r\n var pl = clientX - panelRect.left + 1;\r\n var pt = clientY - panelRect.top + 1;\r\n var pr = panelRect.right - clientX;\r\n var pb = panelRect.bottom - clientY;\r\n // Find the minimum distance to an edge.\r\n var pd = Math.min(pt, pr, pb, pl);\r\n // Return a root zone if the mouse is within an edge.\r\n switch (pd) {\r\n case pt:\r\n if (pt < edges.top) {\r\n return { zone: 'root-top', target: null };\r\n }\r\n break;\r\n case pr:\r\n if (pr < edges.right) {\r\n return { zone: 'root-right', target: null };\r\n }\r\n break;\r\n case pb:\r\n if (pb < edges.bottom) {\r\n return { zone: 'root-bottom', target: null };\r\n }\r\n break;\r\n case pl:\r\n if (pl < edges.left) {\r\n return { zone: 'root-left', target: null };\r\n }\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n }\r\n // Hit test the dock layout at the given client position.\r\n var target = layout.hitTestTabAreas(clientX, clientY);\r\n // Bail if no target area was found.\r\n if (!target) {\r\n return { zone: 'invalid', target: null };\r\n }\r\n // Return the whole tab area when in single document mode.\r\n if (panel.mode === 'single-document') {\r\n return { zone: 'widget-all', target: target };\r\n }\r\n // Compute the distance to each edge of the tab area.\r\n var al = target.x - target.left + 1;\r\n var at = target.y - target.top + 1;\r\n var ar = target.left + target.width - target.x;\r\n var ab = target.top + target.height - target.y;\r\n var tabHeight = target.tabBar.node.getBoundingClientRect().height;\r\n if (at < tabHeight) {\r\n return { zone: 'widget-tab', target: target };\r\n }\r\n // Get the X and Y edge sizes for the area.\r\n var rx = Math.round(target.width / 3);\r\n var ry = Math.round(target.height / 3);\r\n // If the mouse is not within an edge, indicate the entire area.\r\n if (al > rx && ar > rx && at > ry && ab > ry) {\r\n return { zone: 'widget-all', target: target };\r\n }\r\n // Scale the distances by the slenderness ratio.\r\n al /= rx;\r\n at /= ry;\r\n ar /= rx;\r\n ab /= ry;\r\n // Find the minimum distance to the area edge.\r\n var ad = Math.min(al, at, ar, ab);\r\n // Find the widget zone for the area edge.\r\n var zone;\r\n switch (ad) {\r\n case al:\r\n zone = 'widget-left';\r\n break;\r\n case at:\r\n zone = 'widget-top';\r\n break;\r\n case ar:\r\n zone = 'widget-right';\r\n break;\r\n case ab:\r\n zone = 'widget-bottom';\r\n break;\r\n default:\r\n throw 'unreachable';\r\n }\r\n // Return the final drop target.\r\n return { zone: zone, target: target };\r\n }\r\n Private.findDropTarget = findDropTarget;\r\n /**\r\n * Get the drop reference widget for a tab bar.\r\n */\r\n function getDropRef(tabBar) {\r\n if (tabBar.titles.length === 0) {\r\n return null;\r\n }\r\n if (tabBar.currentTitle) {\r\n return tabBar.currentTitle.owner;\r\n }\r\n return tabBar.titles[tabBar.titles.length - 1].owner;\r\n }\r\n Private.getDropRef = getDropRef;\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\n/**\r\n * A class which tracks focus among a set of widgets.\r\n *\r\n * This class is useful when code needs to keep track of the most\r\n * recently focused widget(s) among a set of related widgets.\r\n */\r\nvar FocusTracker = /** @class */ (function () {\r\n /**\r\n * Construct a new focus tracker.\r\n */\r\n function FocusTracker() {\r\n this._counter = 0;\r\n this._widgets = [];\r\n this._activeWidget = null;\r\n this._currentWidget = null;\r\n this._numbers = new Map();\r\n this._nodes = new Map();\r\n this._activeChanged = new signaling_1.Signal(this);\r\n this._currentChanged = new signaling_1.Signal(this);\r\n }\r\n /**\r\n * Dispose of the resources held by the tracker.\r\n */\r\n FocusTracker.prototype.dispose = function () {\r\n var _this = this;\r\n // Do nothing if the tracker is already disposed.\r\n if (this._counter < 0) {\r\n return;\r\n }\r\n // Mark the tracker as disposed.\r\n this._counter = -1;\r\n // Clear the connections for the tracker.\r\n signaling_1.Signal.clearData(this);\r\n // Remove all event listeners.\r\n algorithm_1.each(this._widgets, function (w) {\r\n w.node.removeEventListener('focus', _this, true);\r\n w.node.removeEventListener('blur', _this, true);\r\n });\r\n // Clear the internal data structures.\r\n this._activeWidget = null;\r\n this._currentWidget = null;\r\n this._nodes.clear();\r\n this._numbers.clear();\r\n this._widgets.length = 0;\r\n };\r\n Object.defineProperty(FocusTracker.prototype, \"currentChanged\", {\r\n /**\r\n * A signal emitted when the current widget has changed.\r\n */\r\n get: function () {\r\n return this._currentChanged;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FocusTracker.prototype, \"activeChanged\", {\r\n /**\r\n * A signal emitted when the active widget has changed.\r\n */\r\n get: function () {\r\n return this._activeChanged;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FocusTracker.prototype, \"isDisposed\", {\r\n /**\r\n * A flag indicating whether the tracker is disposed.\r\n */\r\n get: function () {\r\n return this._counter < 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FocusTracker.prototype, \"currentWidget\", {\r\n /**\r\n * The current widget in the tracker.\r\n *\r\n * #### Notes\r\n * The current widget is the widget among the tracked widgets which\r\n * has the *descendant node* which has most recently been focused.\r\n *\r\n * The current widget will not be updated if the node loses focus. It\r\n * will only be updated when a different tracked widget gains focus.\r\n *\r\n * If the current widget is removed from the tracker, the previous\r\n * current widget will be restored.\r\n *\r\n * This behavior is intended to follow a user's conceptual model of\r\n * a semantically \"current\" widget, where the \"last thing of type X\"\r\n * to be interacted with is the \"current instance of X\", regardless\r\n * of whether that instance still has focus.\r\n */\r\n get: function () {\r\n return this._currentWidget;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FocusTracker.prototype, \"activeWidget\", {\r\n /**\r\n * The active widget in the tracker.\r\n *\r\n * #### Notes\r\n * The active widget is the widget among the tracked widgets which\r\n * has the *descendant node* which is currently focused.\r\n */\r\n get: function () {\r\n return this._activeWidget;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FocusTracker.prototype, \"widgets\", {\r\n /**\r\n * A read only array of the widgets being tracked.\r\n */\r\n get: function () {\r\n return this._widgets;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Get the focus number for a particular widget in the tracker.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The focus number for the given widget, or `-1` if the\r\n * widget has not had focus since being added to the tracker, or\r\n * is not contained by the tracker.\r\n *\r\n * #### Notes\r\n * The focus number indicates the relative order in which the widgets\r\n * have gained focus. A widget with a larger number has gained focus\r\n * more recently than a widget with a smaller number.\r\n *\r\n * The `currentWidget` will always have the largest focus number.\r\n *\r\n * All widgets start with a focus number of `-1`, which indicates that\r\n * the widget has not been focused since being added to the tracker.\r\n */\r\n FocusTracker.prototype.focusNumber = function (widget) {\r\n var n = this._numbers.get(widget);\r\n return n === undefined ? -1 : n;\r\n };\r\n /**\r\n * Test whether the focus tracker contains a given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns `true` if the widget is tracked, `false` otherwise.\r\n */\r\n FocusTracker.prototype.has = function (widget) {\r\n return this._numbers.has(widget);\r\n };\r\n /**\r\n * Add a widget to the focus tracker.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * #### Notes\r\n * A widget will be automatically removed from the tracker if it\r\n * is disposed after being added.\r\n *\r\n * If the widget is already tracked, this is a no-op.\r\n */\r\n FocusTracker.prototype.add = function (widget) {\r\n // Do nothing if the widget is already tracked.\r\n if (this._numbers.has(widget)) {\r\n return;\r\n }\r\n // Test whether the widget has focus.\r\n var focused = widget.node.contains(document.activeElement);\r\n // Set up the initial focus number.\r\n var n = focused ? this._counter++ : -1;\r\n // Add the widget to the internal data structures.\r\n this._widgets.push(widget);\r\n this._numbers.set(widget, n);\r\n this._nodes.set(widget.node, widget);\r\n // Set up the event listeners. The capturing phase must be used\r\n // since the 'focus' and 'blur' events don't bubble and Firefox\r\n // doesn't support the 'focusin' or 'focusout' events.\r\n widget.node.addEventListener('focus', this, true);\r\n widget.node.addEventListener('blur', this, true);\r\n // Connect the disposed signal handler.\r\n widget.disposed.connect(this._onWidgetDisposed, this);\r\n // Set the current and active widgets if needed.\r\n if (focused) {\r\n this._setWidgets(widget, widget);\r\n }\r\n };\r\n /**\r\n * Remove a widget from the focus tracker.\r\n *\r\n * #### Notes\r\n * If the widget is the `currentWidget`, the previous current widget\r\n * will become the new `currentWidget`.\r\n *\r\n * A widget will be automatically removed from the tracker if it\r\n * is disposed after being added.\r\n *\r\n * If the widget is not tracked, this is a no-op.\r\n */\r\n FocusTracker.prototype.remove = function (widget) {\r\n var _this = this;\r\n // Bail early if the widget is not tracked.\r\n if (!this._numbers.has(widget)) {\r\n return;\r\n }\r\n // Disconnect the disposed signal handler.\r\n widget.disposed.disconnect(this._onWidgetDisposed, this);\r\n // Remove the event listeners.\r\n widget.node.removeEventListener('focus', this, true);\r\n widget.node.removeEventListener('blur', this, true);\r\n // Remove the widget from the internal data structures.\r\n algorithm_1.ArrayExt.removeFirstOf(this._widgets, widget);\r\n this._nodes.delete(widget.node);\r\n this._numbers.delete(widget);\r\n // Bail early if the widget is not the current widget.\r\n if (this._currentWidget !== widget) {\r\n return;\r\n }\r\n // Filter the widgets for those which have had focus.\r\n var valid = algorithm_1.filter(this._widgets, function (w) { return _this._numbers.get(w) !== -1; });\r\n // Get the valid widget with the max focus number.\r\n var previous = algorithm_1.max(valid, function (first, second) {\r\n var a = _this._numbers.get(first);\r\n var b = _this._numbers.get(second);\r\n return a - b;\r\n }) || null;\r\n // Set the current and active widgets.\r\n this._setWidgets(previous, null);\r\n };\r\n /**\r\n * Handle the DOM events for the focus tracker.\r\n *\r\n * @param event - The DOM event sent to the panel.\r\n *\r\n * #### Notes\r\n * This method implements the DOM `EventListener` interface and is\r\n * called in response to events on the tracked nodes. It should\r\n * not be called directly by user code.\r\n */\r\n FocusTracker.prototype.handleEvent = function (event) {\r\n switch (event.type) {\r\n case 'focus':\r\n this._evtFocus(event);\r\n break;\r\n case 'blur':\r\n this._evtBlur(event);\r\n break;\r\n }\r\n };\r\n /**\r\n * Set the current and active widgets for the tracker.\r\n */\r\n FocusTracker.prototype._setWidgets = function (current, active) {\r\n // Swap the current widget.\r\n var oldCurrent = this._currentWidget;\r\n this._currentWidget = current;\r\n // Swap the active widget.\r\n var oldActive = this._activeWidget;\r\n this._activeWidget = active;\r\n // Emit the `currentChanged` signal if needed.\r\n if (oldCurrent !== current) {\r\n this._currentChanged.emit({ oldValue: oldCurrent, newValue: current });\r\n }\r\n // Emit the `activeChanged` signal if needed.\r\n if (oldActive !== active) {\r\n this._activeChanged.emit({ oldValue: oldActive, newValue: active });\r\n }\r\n };\r\n /**\r\n * Handle the `'focus'` event for a tracked widget.\r\n */\r\n FocusTracker.prototype._evtFocus = function (event) {\r\n // Find the widget which gained focus, which is known to exist.\r\n var widget = this._nodes.get(event.currentTarget);\r\n // Update the focus number if necessary.\r\n if (widget !== this._currentWidget) {\r\n this._numbers.set(widget, this._counter++);\r\n }\r\n // Set the current and active widgets.\r\n this._setWidgets(widget, widget);\r\n };\r\n /**\r\n * Handle the `'blur'` event for a tracked widget.\r\n */\r\n FocusTracker.prototype._evtBlur = function (event) {\r\n // Find the widget which lost focus, which is known to exist.\r\n var widget = this._nodes.get(event.currentTarget);\r\n // Get the node which being focused after this blur.\r\n var focusTarget = event.relatedTarget;\r\n // If no other node is being focused, clear the active widget.\r\n if (!focusTarget) {\r\n this._setWidgets(this._currentWidget, null);\r\n return;\r\n }\r\n // Bail if the focus widget is not changing.\r\n if (widget.node.contains(focusTarget)) {\r\n return;\r\n }\r\n // If no tracked widget is being focused, clear the active widget.\r\n if (!algorithm_1.find(this._widgets, function (w) { return w.node.contains(focusTarget); })) {\r\n this._setWidgets(this._currentWidget, null);\r\n return;\r\n }\r\n };\r\n /**\r\n * Handle the `disposed` signal for a tracked widget.\r\n */\r\n FocusTracker.prototype._onWidgetDisposed = function (sender) {\r\n this.remove(sender);\r\n };\r\n return FocusTracker;\r\n}());\r\nexports.FocusTracker = FocusTracker;\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar properties_1 = require(\"@phosphor/properties\");\r\nvar boxengine_1 = require(\"./boxengine\");\r\nvar layout_1 = require(\"./layout\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A layout which arranges its widgets in a grid.\r\n */\r\nvar GridLayout = /** @class */ (function (_super) {\r\n __extends(GridLayout, _super);\r\n /**\r\n * Construct a new grid layout.\r\n *\r\n * @param options - The options for initializing the layout.\r\n */\r\n function GridLayout(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, options) || this;\r\n _this._dirty = false;\r\n _this._rowSpacing = 4;\r\n _this._columnSpacing = 4;\r\n _this._items = [];\r\n _this._rowStarts = [];\r\n _this._columnStarts = [];\r\n _this._rowSizers = [new boxengine_1.BoxSizer()];\r\n _this._columnSizers = [new boxengine_1.BoxSizer()];\r\n _this._box = null;\r\n if (options.rowCount !== undefined) {\r\n Private.reallocSizers(_this._rowSizers, options.rowCount);\r\n }\r\n if (options.columnCount !== undefined) {\r\n Private.reallocSizers(_this._columnSizers, options.columnCount);\r\n }\r\n if (options.rowSpacing !== undefined) {\r\n _this._rowSpacing = Private.clampValue(options.rowSpacing);\r\n }\r\n if (options.columnSpacing !== undefined) {\r\n _this._columnSpacing = Private.clampValue(options.columnSpacing);\r\n }\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the layout.\r\n */\r\n GridLayout.prototype.dispose = function () {\r\n // Dispose of the widgets and layout items.\r\n algorithm_1.each(this._items, function (item) {\r\n var widget = item.widget;\r\n item.dispose();\r\n widget.dispose();\r\n });\r\n // Clear the layout state.\r\n this._box = null;\r\n this._items.length = 0;\r\n this._rowStarts.length = 0;\r\n this._rowSizers.length = 0;\r\n this._columnStarts.length = 0;\r\n this._columnSizers.length = 0;\r\n // Dispose of the rest of the layout.\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(GridLayout.prototype, \"rowCount\", {\r\n /**\r\n * Get the number of rows in the layout.\r\n */\r\n get: function () {\r\n return this._rowSizers.length;\r\n },\r\n /**\r\n * Set the number of rows in the layout.\r\n *\r\n * #### Notes\r\n * The minimum row count is `1`.\r\n */\r\n set: function (value) {\r\n // Do nothing if the row count does not change.\r\n if (value === this.rowCount) {\r\n return;\r\n }\r\n // Reallocate the row sizers.\r\n Private.reallocSizers(this._rowSizers, value);\r\n // Schedule a fit of the parent.\r\n if (this.parent) {\r\n this.parent.fit();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GridLayout.prototype, \"columnCount\", {\r\n /**\r\n * Get the number of columns in the layout.\r\n */\r\n get: function () {\r\n return this._columnSizers.length;\r\n },\r\n /**\r\n * Set the number of columns in the layout.\r\n *\r\n * #### Notes\r\n * The minimum column count is `1`.\r\n */\r\n set: function (value) {\r\n // Do nothing if the column count does not change.\r\n if (value === this.columnCount) {\r\n return;\r\n }\r\n // Reallocate the column sizers.\r\n Private.reallocSizers(this._columnSizers, value);\r\n // Schedule a fit of the parent.\r\n if (this.parent) {\r\n this.parent.fit();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GridLayout.prototype, \"rowSpacing\", {\r\n /**\r\n * Get the row spacing for the layout.\r\n */\r\n get: function () {\r\n return this._rowSpacing;\r\n },\r\n /**\r\n * Set the row spacing for the layout.\r\n */\r\n set: function (value) {\r\n // Clamp the spacing to the allowed range.\r\n value = Private.clampValue(value);\r\n // Bail if the spacing does not change\r\n if (this._rowSpacing === value) {\r\n return;\r\n }\r\n // Update the internal spacing.\r\n this._rowSpacing = value;\r\n // Schedule a fit of the parent.\r\n if (this.parent) {\r\n this.parent.fit();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GridLayout.prototype, \"columnSpacing\", {\r\n /**\r\n * Get the column spacing for the layout.\r\n */\r\n get: function () {\r\n return this._columnSpacing;\r\n },\r\n /**\r\n * Set the col spacing for the layout.\r\n */\r\n set: function (value) {\r\n // Clamp the spacing to the allowed range.\r\n value = Private.clampValue(value);\r\n // Bail if the spacing does not change\r\n if (this._columnSpacing === value) {\r\n return;\r\n }\r\n // Update the internal spacing.\r\n this._columnSpacing = value;\r\n // Schedule a fit of the parent.\r\n if (this.parent) {\r\n this.parent.fit();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Get the stretch factor for a specific row.\r\n *\r\n * @param index - The row index of interest.\r\n *\r\n * @returns The stretch factor for the row.\r\n *\r\n * #### Notes\r\n * This returns `-1` if the index is out of range.\r\n */\r\n GridLayout.prototype.rowStretch = function (index) {\r\n var sizer = this._rowSizers[index];\r\n return sizer ? sizer.stretch : -1;\r\n };\r\n /**\r\n * Set the stretch factor for a specific row.\r\n *\r\n * @param index - The row index of interest.\r\n *\r\n * @param value - The stretch factor for the row.\r\n *\r\n * #### Notes\r\n * This is a no-op if the index is out of range.\r\n */\r\n GridLayout.prototype.setRowStretch = function (index, value) {\r\n // Look up the row sizer.\r\n var sizer = this._rowSizers[index];\r\n // Bail if the index is out of range.\r\n if (!sizer) {\r\n return;\r\n }\r\n // Clamp the value to the allowed range.\r\n value = Private.clampValue(value);\r\n // Bail if the stretch does not change.\r\n if (sizer.stretch === value) {\r\n return;\r\n }\r\n // Update the sizer stretch.\r\n sizer.stretch = value;\r\n // Schedule an update of the parent.\r\n if (this.parent) {\r\n this.parent.update();\r\n }\r\n };\r\n /**\r\n * Get the stretch factor for a specific column.\r\n *\r\n * @param index - The column index of interest.\r\n *\r\n * @returns The stretch factor for the column.\r\n *\r\n * #### Notes\r\n * This returns `-1` if the index is out of range.\r\n */\r\n GridLayout.prototype.columnStretch = function (index) {\r\n var sizer = this._columnSizers[index];\r\n return sizer ? sizer.stretch : -1;\r\n };\r\n /**\r\n * Set the stretch factor for a specific column.\r\n *\r\n * @param index - The column index of interest.\r\n *\r\n * @param value - The stretch factor for the column.\r\n *\r\n * #### Notes\r\n * This is a no-op if the index is out of range.\r\n */\r\n GridLayout.prototype.setColumnStretch = function (index, value) {\r\n // Look up the column sizer.\r\n var sizer = this._columnSizers[index];\r\n // Bail if the index is out of range.\r\n if (!sizer) {\r\n return;\r\n }\r\n // Clamp the value to the allowed range.\r\n value = Private.clampValue(value);\r\n // Bail if the stretch does not change.\r\n if (sizer.stretch === value) {\r\n return;\r\n }\r\n // Update the sizer stretch.\r\n sizer.stretch = value;\r\n // Schedule an update of the parent.\r\n if (this.parent) {\r\n this.parent.update();\r\n }\r\n };\r\n /**\r\n * Create an iterator over the widgets in the layout.\r\n *\r\n * @returns A new iterator over the widgets in the layout.\r\n */\r\n GridLayout.prototype.iter = function () {\r\n return algorithm_1.map(this._items, function (item) { return item.widget; });\r\n };\r\n /**\r\n * Add a widget to the grid layout.\r\n *\r\n * @param widget - The widget to add to the layout.\r\n *\r\n * #### Notes\r\n * If the widget is already contained in the layout, this is no-op.\r\n */\r\n GridLayout.prototype.addWidget = function (widget) {\r\n // Look up the index for the widget.\r\n var i = algorithm_1.ArrayExt.findFirstIndex(this._items, function (it) { return it.widget === widget; });\r\n // Bail if the widget is already in the layout.\r\n if (i !== -1) {\r\n return;\r\n }\r\n // Add the widget to the layout.\r\n this._items.push(new layout_1.LayoutItem(widget));\r\n // Attach the widget to the parent.\r\n if (this.parent) {\r\n this.attachWidget(widget);\r\n }\r\n };\r\n /**\r\n * Remove a widget from the grid layout.\r\n *\r\n * @param widget - The widget to remove from the layout.\r\n *\r\n * #### Notes\r\n * A widget is automatically removed from the layout when its `parent`\r\n * is set to `null`. This method should only be invoked directly when\r\n * removing a widget from a layout which has yet to be installed on a\r\n * parent widget.\r\n *\r\n * This method does *not* modify the widget's `parent`.\r\n */\r\n GridLayout.prototype.removeWidget = function (widget) {\r\n // Look up the index for the widget.\r\n var i = algorithm_1.ArrayExt.findFirstIndex(this._items, function (it) { return it.widget === widget; });\r\n // Bail if the widget is not in the layout.\r\n if (i !== -1) {\r\n return;\r\n }\r\n // Remove the widget from the layout.\r\n var item = algorithm_1.ArrayExt.removeAt(this._items, i);\r\n // Detach the widget from the parent.\r\n if (this.parent) {\r\n this.detachWidget(widget);\r\n }\r\n // Dispose the layout item.\r\n item.dispose();\r\n };\r\n /**\r\n * Perform layout initialization which requires the parent widget.\r\n */\r\n GridLayout.prototype.init = function () {\r\n var _this = this;\r\n _super.prototype.init.call(this);\r\n algorithm_1.each(this, function (widget) { _this.attachWidget(widget); });\r\n };\r\n /**\r\n * Attach a widget to the parent's DOM node.\r\n *\r\n * @param widget - The widget to attach to the parent.\r\n */\r\n GridLayout.prototype.attachWidget = function (widget) {\r\n // Send a `'before-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeAttach);\r\n }\r\n // Add the widget's node to the parent.\r\n this.parent.node.appendChild(widget.node);\r\n // Send an `'after-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterAttach);\r\n }\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * Detach a widget from the parent's DOM node.\r\n *\r\n * @param widget - The widget to detach from the parent.\r\n */\r\n GridLayout.prototype.detachWidget = function (widget) {\r\n // Send a `'before-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeDetach);\r\n }\r\n // Remove the widget's node from the parent.\r\n this.parent.node.removeChild(widget.node);\r\n // Send an `'after-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterDetach);\r\n }\r\n // Post a fit request for the parent widget.\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'before-show'` message.\r\n */\r\n GridLayout.prototype.onBeforeShow = function (msg) {\r\n _super.prototype.onBeforeShow.call(this, msg);\r\n this.parent.update();\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n GridLayout.prototype.onBeforeAttach = function (msg) {\r\n _super.prototype.onBeforeAttach.call(this, msg);\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-shown'` message.\r\n */\r\n GridLayout.prototype.onChildShown = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-hidden'` message.\r\n */\r\n GridLayout.prototype.onChildHidden = function (msg) {\r\n this.parent.fit();\r\n };\r\n /**\r\n * A message handler invoked on a `'resize'` message.\r\n */\r\n GridLayout.prototype.onResize = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(msg.width, msg.height);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n */\r\n GridLayout.prototype.onUpdateRequest = function (msg) {\r\n if (this.parent.isVisible) {\r\n this._update(-1, -1);\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'fit-request'` message.\r\n */\r\n GridLayout.prototype.onFitRequest = function (msg) {\r\n if (this.parent.isAttached) {\r\n this._fit();\r\n }\r\n };\r\n /**\r\n * Fit the layout to the total size required by the widgets.\r\n */\r\n GridLayout.prototype._fit = function () {\r\n // Reset the min sizes of the sizers.\r\n for (var i = 0, n = this.rowCount; i < n; ++i) {\r\n this._rowSizers[i].minSize = 0;\r\n }\r\n for (var i = 0, n = this.columnCount; i < n; ++i) {\r\n this._columnSizers[i].minSize = 0;\r\n }\r\n // Filter for the visible layout items.\r\n var items = this._items.filter(function (it) { return !it.isHidden; });\r\n // Fit the layout items.\r\n for (var i = 0, n = items.length; i < n; ++i) {\r\n items[i].fit();\r\n }\r\n // Get the max row and column index.\r\n var maxRow = this.rowCount - 1;\r\n var maxCol = this.columnCount - 1;\r\n // Sort the items by row span.\r\n items.sort(Private.rowSpanCmp);\r\n // Update the min sizes of the row sizers.\r\n for (var i = 0, n = items.length; i < n; ++i) {\r\n // Fetch the item.\r\n var item = items[i];\r\n // Get the row bounds for the item.\r\n var config = GridLayout.getCellConfig(item.widget);\r\n var r1 = Math.min(config.row, maxRow);\r\n var r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\r\n // Distribute the minimum height to the sizers as needed.\r\n Private.distributeMin(this._rowSizers, r1, r2, item.minHeight);\r\n }\r\n // Sort the items by column span.\r\n items.sort(Private.columnSpanCmp);\r\n // Update the min sizes of the column sizers.\r\n for (var i = 0, n = items.length; i < n; ++i) {\r\n // Fetch the item.\r\n var item = items[i];\r\n // Get the column bounds for the item.\r\n var config = GridLayout.getCellConfig(item.widget);\r\n var c1 = Math.min(config.column, maxCol);\r\n var c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\r\n // Distribute the minimum width to the sizers as needed.\r\n Private.distributeMin(this._columnSizers, c1, c2, item.minWidth);\r\n }\r\n // If no size constraint is needed, just update the parent.\r\n if (this.fitPolicy === 'set-no-constraint') {\r\n messaging_1.MessageLoop.sendMessage(this.parent, widget_1.Widget.Msg.UpdateRequest);\r\n return;\r\n }\r\n // Set up the computed min size.\r\n var minH = maxRow * this._rowSpacing;\r\n var minW = maxCol * this._columnSpacing;\r\n // Add the sizer minimums to the computed min size.\r\n for (var i = 0, n = this.rowCount; i < n; ++i) {\r\n minH += this._rowSizers[i].minSize;\r\n }\r\n for (var i = 0, n = this.columnCount; i < n; ++i) {\r\n minW += this._columnSizers[i].minSize;\r\n }\r\n // Update the box sizing and add it to the computed min size.\r\n var box = this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n minW += box.horizontalSum;\r\n minH += box.verticalSum;\r\n // Update the parent's min size constraints.\r\n var style = this.parent.node.style;\r\n style.minWidth = minW + \"px\";\r\n style.minHeight = minH + \"px\";\r\n // Set the dirty flag to ensure only a single update occurs.\r\n this._dirty = true;\r\n // Notify the ancestor that it should fit immediately. This may\r\n // cause a resize of the parent, fulfilling the required update.\r\n if (this.parent.parent) {\r\n messaging_1.MessageLoop.sendMessage(this.parent.parent, widget_1.Widget.Msg.FitRequest);\r\n }\r\n // If the dirty flag is still set, the parent was not resized.\r\n // Trigger the required update on the parent widget immediately.\r\n if (this._dirty) {\r\n messaging_1.MessageLoop.sendMessage(this.parent, widget_1.Widget.Msg.UpdateRequest);\r\n }\r\n };\r\n /**\r\n * Update the layout position and size of the widgets.\r\n *\r\n * The parent offset dimensions should be `-1` if unknown.\r\n */\r\n GridLayout.prototype._update = function (offsetWidth, offsetHeight) {\r\n // Clear the dirty flag to indicate the update occurred.\r\n this._dirty = false;\r\n // Measure the parent if the offset dimensions are unknown.\r\n if (offsetWidth < 0) {\r\n offsetWidth = this.parent.node.offsetWidth;\r\n }\r\n if (offsetHeight < 0) {\r\n offsetHeight = this.parent.node.offsetHeight;\r\n }\r\n // Ensure the parent box sizing data is computed.\r\n if (!this._box) {\r\n this._box = domutils_1.ElementExt.boxSizing(this.parent.node);\r\n }\r\n // Compute the layout area adjusted for border and padding.\r\n var top = this._box.paddingTop;\r\n var left = this._box.paddingLeft;\r\n var width = offsetWidth - this._box.horizontalSum;\r\n var height = offsetHeight - this._box.verticalSum;\r\n // Get the max row and column index.\r\n var maxRow = this.rowCount - 1;\r\n var maxCol = this.columnCount - 1;\r\n // Compute the total fixed row and column space.\r\n var fixedRowSpace = maxRow * this._rowSpacing;\r\n var fixedColSpace = maxCol * this._columnSpacing;\r\n // Distribute the available space to the box sizers.\r\n boxengine_1.BoxEngine.calc(this._rowSizers, Math.max(0, height - fixedRowSpace));\r\n boxengine_1.BoxEngine.calc(this._columnSizers, Math.max(0, width - fixedColSpace));\r\n // Update the row start positions.\r\n for (var i = 0, pos = top, n = this.rowCount; i < n; ++i) {\r\n this._rowStarts[i] = pos;\r\n pos += this._rowSizers[i].size + this._rowSpacing;\r\n }\r\n // Update the column start positions.\r\n for (var i = 0, pos = left, n = this.columnCount; i < n; ++i) {\r\n this._columnStarts[i] = pos;\r\n pos += this._columnSizers[i].size + this._columnSpacing;\r\n }\r\n // Update the geometry of the layout items.\r\n for (var i = 0, n = this._items.length; i < n; ++i) {\r\n // Fetch the item.\r\n var item = this._items[i];\r\n // Ignore hidden items.\r\n if (item.isHidden) {\r\n continue;\r\n }\r\n // Fetch the cell bounds for the widget.\r\n var config = GridLayout.getCellConfig(item.widget);\r\n var r1 = Math.min(config.row, maxRow);\r\n var c1 = Math.min(config.column, maxCol);\r\n var r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\r\n var c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\r\n // Compute the cell geometry.\r\n var x = this._columnStarts[c1];\r\n var y = this._rowStarts[r1];\r\n var w = this._columnStarts[c2] + this._columnSizers[c2].size - x;\r\n var h = this._rowStarts[r2] + this._rowSizers[r2].size - y;\r\n // Update the geometry of the layout item.\r\n item.update(x, y, w, h);\r\n }\r\n };\r\n return GridLayout;\r\n}(layout_1.Layout));\r\nexports.GridLayout = GridLayout;\r\n/**\r\n * The namespace for the `GridLayout` class statics.\r\n */\r\n(function (GridLayout) {\r\n /**\r\n * Get the cell config for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The cell config for the widget.\r\n */\r\n function getCellConfig(widget) {\r\n return Private.cellConfigProperty.get(widget);\r\n }\r\n GridLayout.getCellConfig = getCellConfig;\r\n /**\r\n * Set the cell config for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param value - The value for the cell config.\r\n */\r\n function setCellConfig(widget, value) {\r\n Private.cellConfigProperty.set(widget, Private.normalizeConfig(value));\r\n }\r\n GridLayout.setCellConfig = setCellConfig;\r\n})(GridLayout = exports.GridLayout || (exports.GridLayout = {}));\r\nexports.GridLayout = GridLayout;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * The property descriptor for the widget cell config.\r\n */\r\n Private.cellConfigProperty = new properties_1.AttachedProperty({\r\n name: 'cellConfig',\r\n create: function () { return ({ row: 0, column: 0, rowSpan: 1, columnSpan: 1 }); },\r\n changed: onChildCellConfigChanged\r\n });\r\n /**\r\n * Normalize a partial cell config object.\r\n */\r\n function normalizeConfig(config) {\r\n var row = Math.max(0, Math.floor(config.row || 0));\r\n var column = Math.max(0, Math.floor(config.column || 0));\r\n var rowSpan = Math.max(1, Math.floor(config.rowSpan || 0));\r\n var columnSpan = Math.max(1, Math.floor(config.columnSpan || 0));\r\n return { row: row, column: column, rowSpan: rowSpan, columnSpan: columnSpan };\r\n }\r\n Private.normalizeConfig = normalizeConfig;\r\n /**\r\n * Clamp a value to an integer >= 0.\r\n */\r\n function clampValue(value) {\r\n return Math.max(0, Math.floor(value));\r\n }\r\n Private.clampValue = clampValue;\r\n /**\r\n * A sort comparison function for row spans.\r\n */\r\n function rowSpanCmp(a, b) {\r\n var c1 = Private.cellConfigProperty.get(a.widget);\r\n var c2 = Private.cellConfigProperty.get(b.widget);\r\n return c1.rowSpan - c2.rowSpan;\r\n }\r\n Private.rowSpanCmp = rowSpanCmp;\r\n /**\r\n * A sort comparison function for column spans.\r\n */\r\n function columnSpanCmp(a, b) {\r\n var c1 = Private.cellConfigProperty.get(a.widget);\r\n var c2 = Private.cellConfigProperty.get(b.widget);\r\n return c1.columnSpan - c2.columnSpan;\r\n }\r\n Private.columnSpanCmp = columnSpanCmp;\r\n /**\r\n * Reallocate the box sizers for the given grid dimensions.\r\n */\r\n function reallocSizers(sizers, count) {\r\n // Coerce the count to the valid range.\r\n count = Math.max(1, Math.floor(count));\r\n // Add the missing sizers.\r\n while (sizers.length < count) {\r\n sizers.push(new boxengine_1.BoxSizer());\r\n }\r\n // Remove the extra sizers.\r\n if (sizers.length < count) {\r\n sizers.length = count;\r\n }\r\n }\r\n Private.reallocSizers = reallocSizers;\r\n /**\r\n * Distribute a min size constraint across a range of sizers.\r\n */\r\n function distributeMin(sizers, i1, i2, minSize) {\r\n // Sanity check the indices.\r\n if (i2 < i1) {\r\n return;\r\n }\r\n // Handle the simple case of no cell span.\r\n if (i1 === i2) {\r\n var sizer = sizers[i1];\r\n sizer.minSize = Math.max(sizer.minSize, minSize);\r\n return;\r\n }\r\n // Compute the total current min size of the span.\r\n var totalMin = 0;\r\n for (var i = i1; i <= i2; ++i) {\r\n totalMin += sizers[i].minSize;\r\n }\r\n // Do nothing if the total is greater than the required.\r\n if (totalMin >= minSize) {\r\n return;\r\n }\r\n // Compute the portion of the space to allocate to each sizer.\r\n var portion = (minSize - totalMin) / (i2 - i1 + 1);\r\n // Add the portion to each sizer.\r\n for (var i = i1; i <= i2; ++i) {\r\n sizers[i].minSize += portion;\r\n }\r\n }\r\n Private.distributeMin = distributeMin;\r\n /**\r\n * The change handler for the child cell config property.\r\n */\r\n function onChildCellConfigChanged(child) {\r\n if (child.parent && child.parent.layout instanceof GridLayout) {\r\n child.parent.fit();\r\n }\r\n }\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar keyboard_1 = require(\"@phosphor/keyboard\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar virtualdom_1 = require(\"@phosphor/virtualdom\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A widget which displays menus as a canonical menu bar.\r\n */\r\nvar MenuBar = /** @class */ (function (_super) {\r\n __extends(MenuBar, _super);\r\n /**\r\n * Construct a new menu bar.\r\n *\r\n * @param options - The options for initializing the menu bar.\r\n */\r\n function MenuBar(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, { node: Private.createNode() }) || this;\r\n _this._activeIndex = -1;\r\n _this._menus = [];\r\n _this._childMenu = null;\r\n _this.addClass('p-MenuBar');\r\n _this.setFlag(widget_1.Widget.Flag.DisallowLayout);\r\n _this.renderer = options.renderer || MenuBar.defaultRenderer;\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the widget.\r\n */\r\n MenuBar.prototype.dispose = function () {\r\n this._closeChildMenu();\r\n this._menus.length = 0;\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(MenuBar.prototype, \"childMenu\", {\r\n /**\r\n * The child menu of the menu bar.\r\n *\r\n * #### Notes\r\n * This will be `null` if the menu bar does not have an open menu.\r\n */\r\n get: function () {\r\n return this._childMenu;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuBar.prototype, \"contentNode\", {\r\n /**\r\n * Get the menu bar content node.\r\n *\r\n * #### Notes\r\n * This is the node which holds the menu title nodes.\r\n *\r\n * Modifying this node directly can lead to undefined behavior.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-MenuBar-content')[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuBar.prototype, \"activeMenu\", {\r\n /**\r\n * Get the currently active menu.\r\n */\r\n get: function () {\r\n return this._menus[this._activeIndex] || null;\r\n },\r\n /**\r\n * Set the currently active menu.\r\n *\r\n * #### Notes\r\n * If the menu does not exist, the menu will be set to `null`.\r\n */\r\n set: function (value) {\r\n this.activeIndex = value ? this._menus.indexOf(value) : -1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuBar.prototype, \"activeIndex\", {\r\n /**\r\n * Get the index of the currently active menu.\r\n *\r\n * #### Notes\r\n * This will be `-1` if no menu is active.\r\n */\r\n get: function () {\r\n return this._activeIndex;\r\n },\r\n /**\r\n * Set the index of the currently active menu.\r\n *\r\n * #### Notes\r\n * If the menu cannot be activated, the index will be set to `-1`.\r\n */\r\n set: function (value) {\r\n // Adjust the value for an out of range index.\r\n if (value < 0 || value >= this._menus.length) {\r\n value = -1;\r\n }\r\n // Bail early if the index will not change.\r\n if (this._activeIndex === value) {\r\n return;\r\n }\r\n // Update the active index.\r\n this._activeIndex = value;\r\n // Schedule an update of the items.\r\n this.update();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MenuBar.prototype, \"menus\", {\r\n /**\r\n * A read-only array of the menus in the menu bar.\r\n */\r\n get: function () {\r\n return this._menus;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Open the active menu and activate its first menu item.\r\n *\r\n * #### Notes\r\n * If there is no active menu, this is a no-op.\r\n */\r\n MenuBar.prototype.openActiveMenu = function () {\r\n // Bail early if there is no active item.\r\n if (this._activeIndex === -1) {\r\n return;\r\n }\r\n // Open the child menu.\r\n this._openChildMenu();\r\n // Activate the first item in the child menu.\r\n if (this._childMenu) {\r\n this._childMenu.activeIndex = -1;\r\n this._childMenu.activateNextItem();\r\n }\r\n };\r\n /**\r\n * Add a menu to the end of the menu bar.\r\n *\r\n * @param menu - The menu to add to the menu bar.\r\n *\r\n * #### Notes\r\n * If the menu is already added to the menu bar, it will be moved.\r\n */\r\n MenuBar.prototype.addMenu = function (menu) {\r\n this.insertMenu(this._menus.length, menu);\r\n };\r\n /**\r\n * Insert a menu into the menu bar at the specified index.\r\n *\r\n * @param index - The index at which to insert the menu.\r\n *\r\n * @param menu - The menu to insert into the menu bar.\r\n *\r\n * #### Notes\r\n * The index will be clamped to the bounds of the menus.\r\n *\r\n * If the menu is already added to the menu bar, it will be moved.\r\n */\r\n MenuBar.prototype.insertMenu = function (index, menu) {\r\n // Close the child menu before making changes.\r\n this._closeChildMenu();\r\n // Look up the index of the menu.\r\n var i = this._menus.indexOf(menu);\r\n // Clamp the insert index to the array bounds.\r\n var j = Math.max(0, Math.min(index, this._menus.length));\r\n // If the menu is not in the array, insert it.\r\n if (i === -1) {\r\n // Insert the menu into the array.\r\n algorithm_1.ArrayExt.insert(this._menus, j, menu);\r\n // Add the styling class to the menu.\r\n menu.addClass('p-MenuBar-menu');\r\n // Connect to the menu signals.\r\n menu.aboutToClose.connect(this._onMenuAboutToClose, this);\r\n menu.menuRequested.connect(this._onMenuMenuRequested, this);\r\n menu.title.changed.connect(this._onTitleChanged, this);\r\n // Schedule an update of the items.\r\n this.update();\r\n // There is nothing more to do.\r\n return;\r\n }\r\n // Otherwise, the menu exists in the array and should be moved.\r\n // Adjust the index if the location is at the end of the array.\r\n if (j === this._menus.length) {\r\n j--;\r\n }\r\n // Bail if there is no effective move.\r\n if (i === j) {\r\n return;\r\n }\r\n // Move the menu to the new locations.\r\n algorithm_1.ArrayExt.move(this._menus, i, j);\r\n // Schedule an update of the items.\r\n this.update();\r\n };\r\n /**\r\n * Remove a menu from the menu bar.\r\n *\r\n * @param menu - The menu to remove from the menu bar.\r\n *\r\n * #### Notes\r\n * This is a no-op if the menu is not in the menu bar.\r\n */\r\n MenuBar.prototype.removeMenu = function (menu) {\r\n this.removeMenuAt(this._menus.indexOf(menu));\r\n };\r\n /**\r\n * Remove the menu at a given index from the menu bar.\r\n *\r\n * @param index - The index of the menu to remove.\r\n *\r\n * #### Notes\r\n * This is a no-op if the index is out of range.\r\n */\r\n MenuBar.prototype.removeMenuAt = function (index) {\r\n // Close the child menu before making changes.\r\n this._closeChildMenu();\r\n // Remove the menu from the array.\r\n var menu = algorithm_1.ArrayExt.removeAt(this._menus, index);\r\n // Bail if the index is out of range.\r\n if (!menu) {\r\n return;\r\n }\r\n // Disconnect from the menu signals.\r\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\r\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\r\n menu.title.changed.disconnect(this._onTitleChanged, this);\r\n // Remove the styling class from the menu.\r\n menu.removeClass('p-MenuBar-menu');\r\n // Schedule an update of the items.\r\n this.update();\r\n };\r\n /**\r\n * Remove all menus from the menu bar.\r\n */\r\n MenuBar.prototype.clearMenus = function () {\r\n // Bail if there is nothing to remove.\r\n if (this._menus.length === 0) {\r\n return;\r\n }\r\n // Close the child menu before making changes.\r\n this._closeChildMenu();\r\n // Disconnect from the menu signals and remove the styling class.\r\n for (var _i = 0, _a = this._menus; _i < _a.length; _i++) {\r\n var menu = _a[_i];\r\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\r\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\r\n menu.title.changed.disconnect(this._onTitleChanged, this);\r\n menu.removeClass('p-MenuBar-menu');\r\n }\r\n // Clear the menus array.\r\n this._menus.length = 0;\r\n // Schedule an update of the items.\r\n this.update();\r\n };\r\n /**\r\n * Handle the DOM events for the menu bar.\r\n *\r\n * @param event - The DOM event sent to the menu bar.\r\n *\r\n * #### Notes\r\n * This method implements the DOM `EventListener` interface and is\r\n * called in response to events on the menu bar's DOM nodes. It\r\n * should not be called directly by user code.\r\n */\r\n MenuBar.prototype.handleEvent = function (event) {\r\n switch (event.type) {\r\n case 'keydown':\r\n this._evtKeyDown(event);\r\n break;\r\n case 'mousedown':\r\n this._evtMouseDown(event);\r\n break;\r\n case 'mousemove':\r\n this._evtMouseMove(event);\r\n break;\r\n case 'mouseleave':\r\n this._evtMouseLeave(event);\r\n break;\r\n case 'contextmenu':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n MenuBar.prototype.onBeforeAttach = function (msg) {\r\n this.node.addEventListener('keydown', this);\r\n this.node.addEventListener('mousedown', this);\r\n this.node.addEventListener('mousemove', this);\r\n this.node.addEventListener('mouseleave', this);\r\n this.node.addEventListener('contextmenu', this);\r\n };\r\n /**\r\n * A message handler invoked on an `'after-detach'` message.\r\n */\r\n MenuBar.prototype.onAfterDetach = function (msg) {\r\n this.node.removeEventListener('keydown', this);\r\n this.node.removeEventListener('mousedown', this);\r\n this.node.removeEventListener('mousemove', this);\r\n this.node.removeEventListener('mouseleave', this);\r\n this.node.removeEventListener('contextmenu', this);\r\n this._closeChildMenu();\r\n };\r\n /**\r\n * A message handler invoked on an `'activate-request'` message.\r\n */\r\n MenuBar.prototype.onActivateRequest = function (msg) {\r\n if (this.isAttached) {\r\n this.node.focus();\r\n }\r\n };\r\n /**\r\n * A message handler invoked on an `'update-request'` message.\r\n */\r\n MenuBar.prototype.onUpdateRequest = function (msg) {\r\n var menus = this._menus;\r\n var renderer = this.renderer;\r\n var activeIndex = this._activeIndex;\r\n var content = new Array(menus.length);\r\n for (var i = 0, n = menus.length; i < n; ++i) {\r\n var title = menus[i].title;\r\n var active = i === activeIndex;\r\n content[i] = renderer.renderItem({ title: title, active: active });\r\n }\r\n virtualdom_1.VirtualDOM.render(content, this.contentNode);\r\n };\r\n /**\r\n * Handle the `'keydown'` event for the menu bar.\r\n */\r\n MenuBar.prototype._evtKeyDown = function (event) {\r\n // A menu bar handles all keydown events.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Fetch the key code for the event.\r\n var kc = event.keyCode;\r\n // Enter, Up Arrow, Down Arrow\r\n if (kc === 13 || kc === 38 || kc === 40) {\r\n this.openActiveMenu();\r\n return;\r\n }\r\n // Escape\r\n if (kc === 27) {\r\n this._closeChildMenu();\r\n this.activeIndex = -1;\r\n this.node.blur();\r\n return;\r\n }\r\n // Left Arrow\r\n if (kc === 37) {\r\n var i = this._activeIndex;\r\n var n = this._menus.length;\r\n this.activeIndex = i === 0 ? n - 1 : i - 1;\r\n return;\r\n }\r\n // Right Arrow\r\n if (kc === 39) {\r\n var i = this._activeIndex;\r\n var n = this._menus.length;\r\n this.activeIndex = i === n - 1 ? 0 : i + 1;\r\n return;\r\n }\r\n // Get the pressed key character.\r\n var key = keyboard_1.getKeyboardLayout().keyForKeydownEvent(event);\r\n // Bail if the key is not valid.\r\n if (!key) {\r\n return;\r\n }\r\n // Search for the next best matching mnemonic item.\r\n var start = this._activeIndex + 1;\r\n var result = Private.findMnemonic(this._menus, key, start);\r\n // Handle the requested mnemonic based on the search results.\r\n // If exactly one mnemonic is matched, that menu is opened.\r\n // Otherwise, the next mnemonic is activated if available,\r\n // followed by the auto mnemonic if available.\r\n if (result.index !== -1 && !result.multiple) {\r\n this.activeIndex = result.index;\r\n this.openActiveMenu();\r\n }\r\n else if (result.index !== -1) {\r\n this.activeIndex = result.index;\r\n }\r\n else if (result.auto !== -1) {\r\n this.activeIndex = result.auto;\r\n }\r\n };\r\n /**\r\n * Handle the `'mousedown'` event for the menu bar.\r\n */\r\n MenuBar.prototype._evtMouseDown = function (event) {\r\n // Bail if the mouse press was not on the menu bar. This can occur\r\n // when the document listener is installed for an active menu bar.\r\n if (!domutils_1.ElementExt.hitTest(this.node, event.clientX, event.clientY)) {\r\n return;\r\n }\r\n // Stop the propagation of the event. Immediate propagation is\r\n // also stopped so that an open menu does not handle the event.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.stopImmediatePropagation();\r\n // Check if the mouse is over one of the menu items.\r\n var index = algorithm_1.ArrayExt.findFirstIndex(this.contentNode.children, function (node) {\r\n return domutils_1.ElementExt.hitTest(node, event.clientX, event.clientY);\r\n });\r\n // If the press was not on an item, close the child menu.\r\n if (index === -1) {\r\n this._closeChildMenu();\r\n return;\r\n }\r\n // If the press was not the left mouse button, do nothing further.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Otherwise, toggle the open state of the child menu.\r\n if (this._childMenu) {\r\n this._closeChildMenu();\r\n this.activeIndex = index;\r\n }\r\n else {\r\n this.activeIndex = index;\r\n this._openChildMenu();\r\n }\r\n };\r\n /**\r\n * Handle the `'mousemove'` event for the menu bar.\r\n */\r\n MenuBar.prototype._evtMouseMove = function (event) {\r\n // Check if the mouse is over one of the menu items.\r\n var index = algorithm_1.ArrayExt.findFirstIndex(this.contentNode.children, function (node) {\r\n return domutils_1.ElementExt.hitTest(node, event.clientX, event.clientY);\r\n });\r\n // Bail early if the active index will not change.\r\n if (index === this._activeIndex) {\r\n return;\r\n }\r\n // Bail early if a child menu is open and the mouse is not over\r\n // an item. This allows the child menu to be kept open when the\r\n // mouse is over the empty part of the menu bar.\r\n if (index === -1 && this._childMenu) {\r\n return;\r\n }\r\n // Update the active index to the hovered item.\r\n this.activeIndex = index;\r\n // Open the new menu if a menu is already open.\r\n if (this._childMenu) {\r\n this._openChildMenu();\r\n }\r\n };\r\n /**\r\n * Handle the `'mouseleave'` event for the menu bar.\r\n */\r\n MenuBar.prototype._evtMouseLeave = function (event) {\r\n // Reset the active index if there is no open menu.\r\n if (!this._childMenu) {\r\n this.activeIndex = -1;\r\n }\r\n };\r\n /**\r\n * Open the child menu at the active index immediately.\r\n *\r\n * If a different child menu is already open, it will be closed,\r\n * even if there is no active menu.\r\n */\r\n MenuBar.prototype._openChildMenu = function () {\r\n // If there is no active menu, close the current menu.\r\n var newMenu = this.activeMenu;\r\n if (!newMenu) {\r\n this._closeChildMenu();\r\n return;\r\n }\r\n // Bail if there is no effective menu change.\r\n var oldMenu = this._childMenu;\r\n if (oldMenu === newMenu) {\r\n return;\r\n }\r\n // Swap the internal menu reference.\r\n this._childMenu = newMenu;\r\n // Close the current menu, or setup for the new menu.\r\n if (oldMenu) {\r\n oldMenu.close();\r\n }\r\n else {\r\n this.addClass('p-mod-active');\r\n document.addEventListener('mousedown', this, true);\r\n }\r\n // Ensure the menu bar is updated and look up the item node.\r\n messaging_1.MessageLoop.sendMessage(this, widget_1.Widget.Msg.UpdateRequest);\r\n var itemNode = this.contentNode.children[this._activeIndex];\r\n // Get the positioning data for the new menu.\r\n var _a = itemNode.getBoundingClientRect(), left = _a.left, bottom = _a.bottom;\r\n // Open the new menu at the computed location.\r\n newMenu.open(left, bottom, { forceX: true, forceY: true });\r\n };\r\n /**\r\n * Close the child menu immediately.\r\n *\r\n * This is a no-op if a child menu is not open.\r\n */\r\n MenuBar.prototype._closeChildMenu = function () {\r\n // Bail if no child menu is open.\r\n if (!this._childMenu) {\r\n return;\r\n }\r\n // Remove the active class from the menu bar.\r\n this.removeClass('p-mod-active');\r\n // Remove the document listeners.\r\n document.removeEventListener('mousedown', this, true);\r\n // Clear the internal menu reference.\r\n var menu = this._childMenu;\r\n this._childMenu = null;\r\n // Close the menu.\r\n menu.close();\r\n // Reset the active index.\r\n this.activeIndex = -1;\r\n };\r\n /**\r\n * Handle the `aboutToClose` signal of a menu.\r\n */\r\n MenuBar.prototype._onMenuAboutToClose = function (sender) {\r\n // Bail if the sender is not the child menu.\r\n if (sender !== this._childMenu) {\r\n return;\r\n }\r\n // Remove the active class from the menu bar.\r\n this.removeClass('p-mod-active');\r\n // Remove the document listeners.\r\n document.removeEventListener('mousedown', this, true);\r\n // Clear the internal menu reference.\r\n this._childMenu = null;\r\n // Reset the active index.\r\n this.activeIndex = -1;\r\n };\r\n /**\r\n * Handle the `menuRequested` signal of a child menu.\r\n */\r\n MenuBar.prototype._onMenuMenuRequested = function (sender, args) {\r\n // Bail if the sender is not the child menu.\r\n if (sender !== this._childMenu) {\r\n return;\r\n }\r\n // Look up the active index and menu count.\r\n var i = this._activeIndex;\r\n var n = this._menus.length;\r\n // Active the next requested index.\r\n switch (args) {\r\n case 'next':\r\n this.activeIndex = i === n - 1 ? 0 : i + 1;\r\n break;\r\n case 'previous':\r\n this.activeIndex = i === 0 ? n - 1 : i - 1;\r\n break;\r\n }\r\n // Open the active menu.\r\n this.openActiveMenu();\r\n };\r\n /**\r\n * Handle the `changed` signal of a title object.\r\n */\r\n MenuBar.prototype._onTitleChanged = function () {\r\n this.update();\r\n };\r\n return MenuBar;\r\n}(widget_1.Widget));\r\nexports.MenuBar = MenuBar;\r\n/**\r\n * The namespace for the `MenuBar` class statics.\r\n */\r\n(function (MenuBar) {\r\n /**\r\n * The default implementation of `IRenderer`.\r\n *\r\n * #### Notes\r\n * Subclasses are free to reimplement rendering methods as needed.\r\n */\r\n var Renderer = /** @class */ (function () {\r\n /**\r\n * Construct a new renderer.\r\n */\r\n function Renderer() {\r\n }\r\n /**\r\n * Render the virtual element for a menu bar item.\r\n *\r\n * @param data - The data to use for rendering the item.\r\n *\r\n * @returns A virtual element representing the item.\r\n */\r\n Renderer.prototype.renderItem = function (data) {\r\n var className = this.createItemClass(data);\r\n var dataset = this.createItemDataset(data);\r\n return (virtualdom_1.h.li({ className: className, dataset: dataset }, this.renderIcon(data), this.renderLabel(data)));\r\n };\r\n /**\r\n * Render the icon element for a menu bar item.\r\n *\r\n * @param data - The data to use for rendering the icon.\r\n *\r\n * @returns A virtual element representing the item icon.\r\n */\r\n Renderer.prototype.renderIcon = function (data) {\r\n var className = this.createIconClass(data);\r\n return virtualdom_1.h.div({ className: className }, data.title.iconLabel);\r\n };\r\n /**\r\n * Render the label element for a menu item.\r\n *\r\n * @param data - The data to use for rendering the label.\r\n *\r\n * @returns A virtual element representing the item label.\r\n */\r\n Renderer.prototype.renderLabel = function (data) {\r\n var content = this.formatLabel(data);\r\n return virtualdom_1.h.div({ className: 'p-MenuBar-itemLabel' }, content);\r\n };\r\n /**\r\n * Create the class name for the menu bar item.\r\n *\r\n * @param data - The data to use for the class name.\r\n *\r\n * @returns The full class name for the menu item.\r\n */\r\n Renderer.prototype.createItemClass = function (data) {\r\n var name = 'p-MenuBar-item';\r\n if (data.title.className) {\r\n name += \" \" + data.title.className;\r\n }\r\n if (data.active) {\r\n name += ' p-mod-active';\r\n }\r\n return name;\r\n };\r\n /**\r\n * Create the dataset for a menu bar item.\r\n *\r\n * @param data - The data to use for the item.\r\n *\r\n * @returns The dataset for the menu bar item.\r\n */\r\n Renderer.prototype.createItemDataset = function (data) {\r\n return data.title.dataset;\r\n };\r\n /**\r\n * Create the class name for the menu bar item icon.\r\n *\r\n * @param data - The data to use for the class name.\r\n *\r\n * @returns The full class name for the item icon.\r\n */\r\n Renderer.prototype.createIconClass = function (data) {\r\n var name = 'p-MenuBar-itemIcon';\r\n var extra = data.title.iconClass;\r\n return extra ? name + \" \" + extra : name;\r\n };\r\n /**\r\n * Create the render content for the label node.\r\n *\r\n * @param data - The data to use for the label content.\r\n *\r\n * @returns The content to add to the label node.\r\n */\r\n Renderer.prototype.formatLabel = function (data) {\r\n // Fetch the label text and mnemonic index.\r\n var _a = data.title, label = _a.label, mnemonic = _a.mnemonic;\r\n // If the index is out of range, do not modify the label.\r\n if (mnemonic < 0 || mnemonic >= label.length) {\r\n return label;\r\n }\r\n // Split the label into parts.\r\n var prefix = label.slice(0, mnemonic);\r\n var suffix = label.slice(mnemonic + 1);\r\n var char = label[mnemonic];\r\n // Wrap the mnemonic character in a span.\r\n var span = virtualdom_1.h.span({ className: 'p-MenuBar-itemMnemonic' }, char);\r\n // Return the content parts.\r\n return [prefix, span, suffix];\r\n };\r\n return Renderer;\r\n }());\r\n MenuBar.Renderer = Renderer;\r\n /**\r\n * The default `Renderer` instance.\r\n */\r\n MenuBar.defaultRenderer = new Renderer();\r\n})(MenuBar = exports.MenuBar || (exports.MenuBar = {}));\r\nexports.MenuBar = MenuBar;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * Create the DOM node for a menu bar.\r\n */\r\n function createNode() {\r\n var node = document.createElement('div');\r\n var content = document.createElement('ul');\r\n content.className = 'p-MenuBar-content';\r\n node.appendChild(content);\r\n node.tabIndex = -1;\r\n return node;\r\n }\r\n Private.createNode = createNode;\r\n /**\r\n * Find the best matching mnemonic item.\r\n *\r\n * The search starts at the given index and wraps around.\r\n */\r\n function findMnemonic(menus, key, start) {\r\n // Setup the result variables.\r\n var index = -1;\r\n var auto = -1;\r\n var multiple = false;\r\n // Normalize the key to upper case.\r\n var upperKey = key.toUpperCase();\r\n // Search the items from the given start index.\r\n for (var i = 0, n = menus.length; i < n; ++i) {\r\n // Compute the wrapped index.\r\n var k = (i + start) % n;\r\n // Look up the menu title.\r\n var title = menus[k].title;\r\n // Ignore titles with an empty label.\r\n if (title.label.length === 0) {\r\n continue;\r\n }\r\n // Look up the mnemonic index for the label.\r\n var mn = title.mnemonic;\r\n // Handle a valid mnemonic index.\r\n if (mn >= 0 && mn < title.label.length) {\r\n if (title.label[mn].toUpperCase() === upperKey) {\r\n if (index === -1) {\r\n index = k;\r\n }\r\n else {\r\n multiple = true;\r\n }\r\n }\r\n continue;\r\n }\r\n // Finally, handle the auto index if possible.\r\n if (auto === -1 && title.label[0].toUpperCase() === upperKey) {\r\n auto = k;\r\n }\r\n }\r\n // Return the search results.\r\n return { index: index, multiple: multiple, auto: auto };\r\n }\r\n Private.findMnemonic = findMnemonic;\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar dragdrop_1 = require(\"@phosphor/dragdrop\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A widget which implements a canonical scroll bar.\r\n */\r\nvar ScrollBar = /** @class */ (function (_super) {\r\n __extends(ScrollBar, _super);\r\n /**\r\n * Construct a new scroll bar.\r\n *\r\n * @param options - The options for initializing the scroll bar.\r\n */\r\n function ScrollBar(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, { node: Private.createNode() }) || this;\r\n /**\r\n * A timeout callback for repeating the mouse press.\r\n */\r\n _this._onRepeat = function () {\r\n // Clear the repeat timer id.\r\n _this._repeatTimer = -1;\r\n // Bail if the mouse has been released.\r\n if (!_this._pressData) {\r\n return;\r\n }\r\n // Look up the part that was pressed.\r\n var part = _this._pressData.part;\r\n // Bail if the thumb was pressed.\r\n if (part === 'thumb') {\r\n return;\r\n }\r\n // Schedule the timer for another repeat.\r\n _this._repeatTimer = window.setTimeout(_this._onRepeat, 20);\r\n // Get the current mouse position.\r\n var mouseX = _this._pressData.mouseX;\r\n var mouseY = _this._pressData.mouseY;\r\n // Handle a decrement button repeat.\r\n if (part === 'decrement') {\r\n // Bail if the mouse is not over the button.\r\n if (!domutils_1.ElementExt.hitTest(_this.decrementNode, mouseX, mouseY)) {\r\n return;\r\n }\r\n // Emit the step requested signal.\r\n _this._stepRequested.emit('decrement');\r\n // Finished.\r\n return;\r\n }\r\n // Handle an increment button repeat.\r\n if (part === 'increment') {\r\n // Bail if the mouse is not over the button.\r\n if (!domutils_1.ElementExt.hitTest(_this.incrementNode, mouseX, mouseY)) {\r\n return;\r\n }\r\n // Emit the step requested signal.\r\n _this._stepRequested.emit('increment');\r\n // Finished.\r\n return;\r\n }\r\n // Handle a track repeat.\r\n if (part === 'track') {\r\n // Bail if the mouse is not over the track.\r\n if (!domutils_1.ElementExt.hitTest(_this.trackNode, mouseX, mouseY)) {\r\n return;\r\n }\r\n // Fetch the thumb node.\r\n var thumbNode = _this.thumbNode;\r\n // Bail if the mouse is over the thumb.\r\n if (domutils_1.ElementExt.hitTest(thumbNode, mouseX, mouseY)) {\r\n return;\r\n }\r\n // Fetch the client rect for the thumb.\r\n var thumbRect = thumbNode.getBoundingClientRect();\r\n // Determine the direction for the page request.\r\n var dir = void 0;\r\n if (_this._orientation === 'horizontal') {\r\n dir = mouseX < thumbRect.left ? 'decrement' : 'increment';\r\n }\r\n else {\r\n dir = mouseY < thumbRect.top ? 'decrement' : 'increment';\r\n }\r\n // Emit the page requested signal.\r\n _this._pageRequested.emit(dir);\r\n // Finished.\r\n return;\r\n }\r\n };\r\n _this._value = 0;\r\n _this._page = 10;\r\n _this._maximum = 100;\r\n _this._repeatTimer = -1;\r\n _this._pressData = null;\r\n _this._thumbMoved = new signaling_1.Signal(_this);\r\n _this._stepRequested = new signaling_1.Signal(_this);\r\n _this._pageRequested = new signaling_1.Signal(_this);\r\n _this.addClass('p-ScrollBar');\r\n _this.setFlag(widget_1.Widget.Flag.DisallowLayout);\r\n // Set the orientation.\r\n _this._orientation = options.orientation || 'vertical';\r\n _this.dataset['orientation'] = _this._orientation;\r\n // Parse the rest of the options.\r\n if (options.maximum !== undefined) {\r\n _this._maximum = Math.max(0, options.maximum);\r\n }\r\n if (options.page !== undefined) {\r\n _this._page = Math.max(0, options.page);\r\n }\r\n if (options.value !== undefined) {\r\n _this._value = Math.max(0, Math.min(options.value, _this._maximum));\r\n }\r\n return _this;\r\n }\r\n Object.defineProperty(ScrollBar.prototype, \"thumbMoved\", {\r\n /**\r\n * A signal emitted when the user moves the scroll thumb.\r\n *\r\n * #### Notes\r\n * The payload is the current value of the scroll bar.\r\n */\r\n get: function () {\r\n return this._thumbMoved;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"stepRequested\", {\r\n /**\r\n * A signal emitted when the user clicks a step button.\r\n *\r\n * #### Notes\r\n * The payload is whether a decrease or increase is requested.\r\n */\r\n get: function () {\r\n return this._stepRequested;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"pageRequested\", {\r\n /**\r\n * A signal emitted when the user clicks the scroll track.\r\n *\r\n * #### Notes\r\n * The payload is whether a decrease or increase is requested.\r\n */\r\n get: function () {\r\n return this._pageRequested;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"orientation\", {\r\n /**\r\n * Get the orientation of the scroll bar.\r\n */\r\n get: function () {\r\n return this._orientation;\r\n },\r\n /**\r\n * Set the orientation of the scroll bar.\r\n */\r\n set: function (value) {\r\n // Do nothing if the orientation does not change.\r\n if (this._orientation === value) {\r\n return;\r\n }\r\n // Release the mouse before making changes.\r\n this._releaseMouse();\r\n // Update the internal orientation.\r\n this._orientation = value;\r\n this.dataset['orientation'] = value;\r\n // Schedule an update the scroll bar.\r\n this.update();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"value\", {\r\n /**\r\n * Get the current value of the scroll bar.\r\n */\r\n get: function () {\r\n return this._value;\r\n },\r\n /**\r\n * Set the current value of the scroll bar.\r\n *\r\n * #### Notes\r\n * The value will be clamped to the range `[0, maximum]`.\r\n */\r\n set: function (value) {\r\n // Clamp the value to the allowable range.\r\n value = Math.max(0, Math.min(value, this._maximum));\r\n // Do nothing if the value does not change.\r\n if (this._value === value) {\r\n return;\r\n }\r\n // Update the internal value.\r\n this._value = value;\r\n // Schedule an update the scroll bar.\r\n this.update();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"page\", {\r\n /**\r\n * Get the page size of the scroll bar.\r\n *\r\n * #### Notes\r\n * The page size is the amount of visible content in the scrolled\r\n * region, expressed in data units. It determines the size of the\r\n * scroll bar thumb.\r\n */\r\n get: function () {\r\n return this._page;\r\n },\r\n /**\r\n * Set the page size of the scroll bar.\r\n *\r\n * #### Notes\r\n * The page size will be clamped to the range `[0, Infinity]`.\r\n */\r\n set: function (value) {\r\n // Clamp the page size to the allowable range.\r\n value = Math.max(0, value);\r\n // Do nothing if the value does not change.\r\n if (this._page === value) {\r\n return;\r\n }\r\n // Update the internal page size.\r\n this._page = value;\r\n // Schedule an update the scroll bar.\r\n this.update();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"maximum\", {\r\n /**\r\n * Get the maximum value of the scroll bar.\r\n */\r\n get: function () {\r\n return this._maximum;\r\n },\r\n /**\r\n * Set the maximum value of the scroll bar.\r\n *\r\n * #### Notes\r\n * The max size will be clamped to the range `[0, Infinity]`.\r\n */\r\n set: function (value) {\r\n // Clamp the value to the allowable range.\r\n value = Math.max(0, value);\r\n // Do nothing if the value does not change.\r\n if (this._maximum === value) {\r\n return;\r\n }\r\n // Update the internal values.\r\n this._maximum = value;\r\n // Clamp the current value to the new range.\r\n this._value = Math.min(this._value, value);\r\n // Schedule an update the scroll bar.\r\n this.update();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"decrementNode\", {\r\n /**\r\n * The scroll bar decrement button node.\r\n *\r\n * #### Notes\r\n * Modifying this node directly can lead to undefined behavior.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-ScrollBar-button')[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"incrementNode\", {\r\n /**\r\n * The scroll bar increment button node.\r\n *\r\n * #### Notes\r\n * Modifying this node directly can lead to undefined behavior.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-ScrollBar-button')[1];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"trackNode\", {\r\n /**\r\n * The scroll bar track node.\r\n *\r\n * #### Notes\r\n * Modifying this node directly can lead to undefined behavior.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-ScrollBar-track')[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ScrollBar.prototype, \"thumbNode\", {\r\n /**\r\n * The scroll bar thumb node.\r\n *\r\n * #### Notes\r\n * Modifying this node directly can lead to undefined behavior.\r\n */\r\n get: function () {\r\n return this.node.getElementsByClassName('p-ScrollBar-thumb')[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Handle the DOM events for the scroll bar.\r\n *\r\n * @param event - The DOM event sent to the scroll bar.\r\n *\r\n * #### Notes\r\n * This method implements the DOM `EventListener` interface and is\r\n * called in response to events on the scroll bar's DOM node.\r\n *\r\n * This should not be called directly by user code.\r\n */\r\n ScrollBar.prototype.handleEvent = function (event) {\r\n switch (event.type) {\r\n case 'mousedown':\r\n this._evtMouseDown(event);\r\n break;\r\n case 'mousemove':\r\n this._evtMouseMove(event);\r\n break;\r\n case 'mouseup':\r\n this._evtMouseUp(event);\r\n break;\r\n case 'keydown':\r\n this._evtKeyDown(event);\r\n break;\r\n case 'contextmenu':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n }\r\n };\r\n /**\r\n * A method invoked on a 'before-attach' message.\r\n */\r\n ScrollBar.prototype.onBeforeAttach = function (msg) {\r\n this.node.addEventListener('mousedown', this);\r\n this.update();\r\n };\r\n /**\r\n * A method invoked on an 'after-detach' message.\r\n */\r\n ScrollBar.prototype.onAfterDetach = function (msg) {\r\n this.node.removeEventListener('mousedown', this);\r\n this._releaseMouse();\r\n };\r\n /**\r\n * A method invoked on an 'update-request' message.\r\n */\r\n ScrollBar.prototype.onUpdateRequest = function (msg) {\r\n // Convert the value and page into percentages.\r\n var value = this._value * 100 / this._maximum;\r\n var page = this._page * 100 / (this._page + this._maximum);\r\n // Clamp the value and page to the relevant range.\r\n value = Math.max(0, Math.min(value, 100));\r\n page = Math.max(0, Math.min(page, 100));\r\n // Fetch the thumb style.\r\n var thumbStyle = this.thumbNode.style;\r\n // Update the thumb style for the current orientation.\r\n if (this._orientation === 'horizontal') {\r\n thumbStyle.top = '';\r\n thumbStyle.height = '';\r\n thumbStyle.left = value + \"%\";\r\n thumbStyle.width = page + \"%\";\r\n thumbStyle.transform = \"translate(\" + -value + \"%, 0%)\";\r\n }\r\n else {\r\n thumbStyle.left = '';\r\n thumbStyle.width = '';\r\n thumbStyle.top = value + \"%\";\r\n thumbStyle.height = page + \"%\";\r\n thumbStyle.transform = \"translate(0%, \" + -value + \"%)\";\r\n }\r\n };\r\n /**\r\n * Handle the `'keydown'` event for the scroll bar.\r\n */\r\n ScrollBar.prototype._evtKeyDown = function (event) {\r\n // Stop all input events during drag.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Ignore anything except the `Escape` key.\r\n if (event.keyCode !== 27) {\r\n return;\r\n }\r\n // Fetch the previous scroll value.\r\n var value = this._pressData ? this._pressData.value : -1;\r\n // Release the mouse.\r\n this._releaseMouse();\r\n // Restore the old scroll value if possible.\r\n if (value !== -1) {\r\n this._moveThumb(value);\r\n }\r\n };\r\n /**\r\n * Handle the `'mousedown'` event for the scroll bar.\r\n */\r\n ScrollBar.prototype._evtMouseDown = function (event) {\r\n // Do nothing if it's not a left mouse press.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Do nothing if the mouse is already captured.\r\n if (this._pressData) {\r\n return;\r\n }\r\n // Find the pressed scroll bar part.\r\n var part = Private.findPart(this, event.target);\r\n // Do nothing if the part is not of interest.\r\n if (!part) {\r\n return;\r\n }\r\n // Stop the event propagation.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Override the mouse cursor.\r\n var override = dragdrop_1.Drag.overrideCursor('default');\r\n // Set up the press data.\r\n this._pressData = {\r\n part: part, override: override,\r\n delta: -1, value: -1,\r\n mouseX: event.clientX,\r\n mouseY: event.clientY\r\n };\r\n // Add the extra event listeners.\r\n document.addEventListener('mousemove', this, true);\r\n document.addEventListener('mouseup', this, true);\r\n document.addEventListener('keydown', this, true);\r\n document.addEventListener('contextmenu', this, true);\r\n // Handle a thumb press.\r\n if (part === 'thumb') {\r\n // Fetch the thumb node.\r\n var thumbNode = this.thumbNode;\r\n // Fetch the client rect for the thumb.\r\n var thumbRect = thumbNode.getBoundingClientRect();\r\n // Update the press data delta for the current orientation.\r\n if (this._orientation === 'horizontal') {\r\n this._pressData.delta = event.clientX - thumbRect.left;\r\n }\r\n else {\r\n this._pressData.delta = event.clientY - thumbRect.top;\r\n }\r\n // Add the active class to the thumb node.\r\n thumbNode.classList.add('p-mod-active');\r\n // Store the current value in the press data.\r\n this._pressData.value = this._value;\r\n // Finished.\r\n return;\r\n }\r\n // Handle a track press.\r\n if (part === 'track') {\r\n // Fetch the client rect for the thumb.\r\n var thumbRect = this.thumbNode.getBoundingClientRect();\r\n // Determine the direction for the page request.\r\n var dir = void 0;\r\n if (this._orientation === 'horizontal') {\r\n dir = event.clientX < thumbRect.left ? 'decrement' : 'increment';\r\n }\r\n else {\r\n dir = event.clientY < thumbRect.top ? 'decrement' : 'increment';\r\n }\r\n // Start the repeat timer.\r\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\r\n // Emit the page requested signal.\r\n this._pageRequested.emit(dir);\r\n // Finished.\r\n return;\r\n }\r\n // Handle a decrement button press.\r\n if (part === 'decrement') {\r\n // Add the active class to the decrement node.\r\n this.decrementNode.classList.add('p-mod-active');\r\n // Start the repeat timer.\r\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\r\n // Emit the step requested signal.\r\n this._stepRequested.emit('decrement');\r\n // Finished.\r\n return;\r\n }\r\n // Handle an increment button press.\r\n if (part === 'increment') {\r\n // Add the active class to the increment node.\r\n this.incrementNode.classList.add('p-mod-active');\r\n // Start the repeat timer.\r\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\r\n // Emit the step requested signal.\r\n this._stepRequested.emit('increment');\r\n // Finished.\r\n return;\r\n }\r\n };\r\n /**\r\n * Handle the `'mousemove'` event for the scroll bar.\r\n */\r\n ScrollBar.prototype._evtMouseMove = function (event) {\r\n // Do nothing if no drag is in progress.\r\n if (!this._pressData) {\r\n return;\r\n }\r\n // Stop the event propagation.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Update the mouse position.\r\n this._pressData.mouseX = event.clientX;\r\n this._pressData.mouseY = event.clientY;\r\n // Bail if the thumb is not being dragged.\r\n if (this._pressData.part !== 'thumb') {\r\n return;\r\n }\r\n // Get the client rect for the thumb and track.\r\n var thumbRect = this.thumbNode.getBoundingClientRect();\r\n var trackRect = this.trackNode.getBoundingClientRect();\r\n // Fetch the scroll geometry based on the orientation.\r\n var trackPos;\r\n var trackSpan;\r\n if (this._orientation === 'horizontal') {\r\n trackPos = event.clientX - trackRect.left - this._pressData.delta;\r\n trackSpan = trackRect.width - thumbRect.width;\r\n }\r\n else {\r\n trackPos = event.clientY - trackRect.top - this._pressData.delta;\r\n trackSpan = trackRect.height - thumbRect.height;\r\n }\r\n // Compute the desired value from the scroll geometry.\r\n var value = trackSpan === 0 ? 0 : trackPos * this._maximum / trackSpan;\r\n // Move the thumb to the computed value.\r\n this._moveThumb(value);\r\n };\r\n /**\r\n * Handle the `'mouseup'` event for the scroll bar.\r\n */\r\n ScrollBar.prototype._evtMouseUp = function (event) {\r\n // Do nothing if it's not a left mouse release.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Stop the event propagation.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Release the mouse.\r\n this._releaseMouse();\r\n };\r\n /**\r\n * Release the mouse and restore the node states.\r\n */\r\n ScrollBar.prototype._releaseMouse = function () {\r\n // Bail if there is no press data.\r\n if (!this._pressData) {\r\n return;\r\n }\r\n // Clear the repeat timer.\r\n clearTimeout(this._repeatTimer);\r\n this._repeatTimer = -1;\r\n // Clear the press data.\r\n this._pressData.override.dispose();\r\n this._pressData = null;\r\n // Remove the extra event listeners.\r\n document.removeEventListener('mousemove', this, true);\r\n document.removeEventListener('mouseup', this, true);\r\n document.removeEventListener('keydown', this, true);\r\n document.removeEventListener('contextmenu', this, true);\r\n // Remove the active classes from the nodes.\r\n this.thumbNode.classList.remove('p-mod-active');\r\n this.decrementNode.classList.remove('p-mod-active');\r\n this.incrementNode.classList.remove('p-mod-active');\r\n };\r\n /**\r\n * Move the thumb to the specified position.\r\n */\r\n ScrollBar.prototype._moveThumb = function (value) {\r\n // Clamp the value to the allowed range.\r\n value = Math.max(0, Math.min(value, this._maximum));\r\n // Bail if the value does not change.\r\n if (this._value === value) {\r\n return;\r\n }\r\n // Update the internal value.\r\n this._value = value;\r\n // Schedule an update of the scroll bar.\r\n this.update();\r\n // Emit the thumb moved signal.\r\n this._thumbMoved.emit(value);\r\n };\r\n return ScrollBar;\r\n}(widget_1.Widget));\r\nexports.ScrollBar = ScrollBar;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * Create the DOM node for a scroll bar.\r\n */\r\n function createNode() {\r\n var node = document.createElement('div');\r\n var decrement = document.createElement('div');\r\n var increment = document.createElement('div');\r\n var track = document.createElement('div');\r\n var thumb = document.createElement('div');\r\n decrement.className = 'p-ScrollBar-button';\r\n increment.className = 'p-ScrollBar-button';\r\n decrement.dataset['action'] = 'decrement';\r\n increment.dataset['action'] = 'increment';\r\n track.className = 'p-ScrollBar-track';\r\n thumb.className = 'p-ScrollBar-thumb';\r\n track.appendChild(thumb);\r\n node.appendChild(decrement);\r\n node.appendChild(track);\r\n node.appendChild(increment);\r\n return node;\r\n }\r\n Private.createNode = createNode;\r\n /**\r\n * Find the scroll bar part which contains the given target.\r\n */\r\n function findPart(scrollBar, target) {\r\n // Test the thumb.\r\n if (scrollBar.thumbNode.contains(target)) {\r\n return 'thumb';\r\n }\r\n // Test the track.\r\n if (scrollBar.trackNode.contains(target)) {\r\n return 'track';\r\n }\r\n // Test the decrement button.\r\n if (scrollBar.decrementNode.contains(target)) {\r\n return 'decrement';\r\n }\r\n // Test the increment button.\r\n if (scrollBar.incrementNode.contains(target)) {\r\n return 'increment';\r\n }\r\n // Indicate no match.\r\n return null;\r\n }\r\n Private.findPart = findPart;\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar layout_1 = require(\"./layout\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A concrete layout implementation which holds a single widget.\r\n *\r\n * #### Notes\r\n * This class is useful for creating simple container widgets which\r\n * hold a single child. The child should be positioned with CSS.\r\n */\r\nvar SingletonLayout = /** @class */ (function (_super) {\r\n __extends(SingletonLayout, _super);\r\n function SingletonLayout() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this._widget = null;\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the layout.\r\n */\r\n SingletonLayout.prototype.dispose = function () {\r\n if (this._widget) {\r\n var widget = this._widget;\r\n this._widget = null;\r\n widget.dispose();\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(SingletonLayout.prototype, \"widget\", {\r\n /**\r\n * Get the child widget for the layout.\r\n */\r\n get: function () {\r\n return this._widget;\r\n },\r\n /**\r\n * Set the child widget for the layout.\r\n *\r\n * #### Notes\r\n * Setting the child widget will cause the old child widget to be\r\n * automatically disposed. If that is not desired, set the parent\r\n * of the old child to `null` before assigning a new child.\r\n */\r\n set: function (widget) {\r\n // Bail early if the widget does not change.\r\n if (this._widget === widget) {\r\n return;\r\n }\r\n // Dispose of the old child widget.\r\n if (this._widget) {\r\n this._widget.dispose();\r\n }\r\n // Update the internal widget.\r\n this._widget = widget;\r\n // Attach the new child widget if needed.\r\n if (this.parent && widget) {\r\n this.attachWidget(widget);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Create an iterator over the widgets in the layout.\r\n *\r\n * @returns A new iterator over the widgets in the layout.\r\n */\r\n SingletonLayout.prototype.iter = function () {\r\n return this._widget ? algorithm_1.once(this._widget) : algorithm_1.empty();\r\n };\r\n /**\r\n * Remove a widget from the layout.\r\n *\r\n * @param widget - The widget to remove from the layout.\r\n *\r\n * #### Notes\r\n * A widget is automatically removed from the layout when its `parent`\r\n * is set to `null`. This method should only be invoked directly when\r\n * removing a widget from a layout which has yet to be installed on a\r\n * parent widget.\r\n *\r\n * This method does *not* modify the widget's `parent`.\r\n */\r\n SingletonLayout.prototype.removeWidget = function (widget) {\r\n // Bail early if the widget does not exist in the layout.\r\n if (this._widget !== widget) {\r\n return;\r\n }\r\n // Clear the internal widget.\r\n this._widget = null;\r\n // If the layout is parented, detach the widget from the DOM.\r\n if (this.parent) {\r\n this.detachWidget(widget);\r\n }\r\n };\r\n /**\r\n * Perform layout initialization which requires the parent widget.\r\n */\r\n SingletonLayout.prototype.init = function () {\r\n var _this = this;\r\n _super.prototype.init.call(this);\r\n algorithm_1.each(this, function (widget) { _this.attachWidget(widget); });\r\n };\r\n /**\r\n * Attach a widget to the parent's DOM node.\r\n *\r\n * @param index - The current index of the widget in the layout.\r\n *\r\n * @param widget - The widget to attach to the parent.\r\n *\r\n * #### Notes\r\n * This method is called automatically by the single layout at the\r\n * appropriate time. It should not be called directly by user code.\r\n *\r\n * The default implementation adds the widgets's node to the parent's\r\n * node at the proper location, and sends the appropriate attach\r\n * messages to the widget if the parent is attached to the DOM.\r\n *\r\n * Subclasses may reimplement this method to control how the widget's\r\n * node is added to the parent's node.\r\n */\r\n SingletonLayout.prototype.attachWidget = function (widget) {\r\n // Send a `'before-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeAttach);\r\n }\r\n // Add the widget's node to the parent.\r\n this.parent.node.appendChild(widget.node);\r\n // Send an `'after-attach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterAttach);\r\n }\r\n };\r\n /**\r\n * Detach a widget from the parent's DOM node.\r\n *\r\n * @param widget - The widget to detach from the parent.\r\n *\r\n * #### Notes\r\n * This method is called automatically by the single layout at the\r\n * appropriate time. It should not be called directly by user code.\r\n *\r\n * The default implementation removes the widget's node from the\r\n * parent's node, and sends the appropriate detach messages to the\r\n * widget if the parent is attached to the DOM.\r\n *\r\n * Subclasses may reimplement this method to control how the widget's\r\n * node is removed from the parent's node.\r\n */\r\n SingletonLayout.prototype.detachWidget = function (widget) {\r\n // Send a `'before-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.BeforeDetach);\r\n }\r\n // Remove the widget's node from the parent.\r\n this.parent.node.removeChild(widget.node);\r\n // Send an `'after-detach'` message if the parent is attached.\r\n if (this.parent.isAttached) {\r\n messaging_1.MessageLoop.sendMessage(widget, widget_1.Widget.Msg.AfterDetach);\r\n }\r\n };\r\n return SingletonLayout;\r\n}(layout_1.Layout));\r\nexports.SingletonLayout = SingletonLayout;\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar algorithm_1 = require(\"@phosphor/algorithm\");\r\nvar dragdrop_1 = require(\"@phosphor/dragdrop\");\r\nvar panel_1 = require(\"./panel\");\r\nvar splitlayout_1 = require(\"./splitlayout\");\r\n/**\r\n * A panel which arranges its widgets into resizable sections.\r\n *\r\n * #### Notes\r\n * This class provides a convenience wrapper around a [[SplitLayout]].\r\n */\r\nvar SplitPanel = /** @class */ (function (_super) {\r\n __extends(SplitPanel, _super);\r\n /**\r\n * Construct a new split panel.\r\n *\r\n * @param options - The options for initializing the split panel.\r\n */\r\n function SplitPanel(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this, { layout: Private.createLayout(options) }) || this;\r\n _this._pressData = null;\r\n _this.addClass('p-SplitPanel');\r\n return _this;\r\n }\r\n /**\r\n * Dispose of the resources held by the panel.\r\n */\r\n SplitPanel.prototype.dispose = function () {\r\n this._releaseMouse();\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(SplitPanel.prototype, \"orientation\", {\r\n /**\r\n * Get the layout orientation for the split panel.\r\n */\r\n get: function () {\r\n return this.layout.orientation;\r\n },\r\n /**\r\n * Set the layout orientation for the split panel.\r\n */\r\n set: function (value) {\r\n this.layout.orientation = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SplitPanel.prototype, \"alignment\", {\r\n /**\r\n * Get the content alignment for the split panel.\r\n *\r\n * #### Notes\r\n * This is the alignment of the widgets in the layout direction.\r\n *\r\n * The alignment has no effect if the widgets can expand to fill the\r\n * entire split panel.\r\n */\r\n get: function () {\r\n return this.layout.alignment;\r\n },\r\n /**\r\n * Set the content alignment for the split panel.\r\n *\r\n * #### Notes\r\n * This is the alignment of the widgets in the layout direction.\r\n *\r\n * The alignment has no effect if the widgets can expand to fill the\r\n * entire split panel.\r\n */\r\n set: function (value) {\r\n this.layout.alignment = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SplitPanel.prototype, \"spacing\", {\r\n /**\r\n * Get the inter-element spacing for the split panel.\r\n */\r\n get: function () {\r\n return this.layout.spacing;\r\n },\r\n /**\r\n * Set the inter-element spacing for the split panel.\r\n */\r\n set: function (value) {\r\n this.layout.spacing = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SplitPanel.prototype, \"renderer\", {\r\n /**\r\n * The renderer used by the split panel.\r\n */\r\n get: function () {\r\n return this.layout.renderer;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SplitPanel.prototype, \"handles\", {\r\n /**\r\n * A read-only array of the split handles in the panel.\r\n */\r\n get: function () {\r\n return this.layout.handles;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Get the relative sizes of the widgets in the panel.\r\n *\r\n * @returns A new array of the relative sizes of the widgets.\r\n *\r\n * #### Notes\r\n * The returned sizes reflect the sizes of the widgets normalized\r\n * relative to their siblings.\r\n *\r\n * This method **does not** measure the DOM nodes.\r\n */\r\n SplitPanel.prototype.relativeSizes = function () {\r\n return this.layout.relativeSizes();\r\n };\r\n /**\r\n * Set the relative sizes for the widgets in the panel.\r\n *\r\n * @param sizes - The relative sizes for the widgets in the panel.\r\n *\r\n * #### Notes\r\n * Extra values are ignored, too few will yield an undefined layout.\r\n *\r\n * The actual geometry of the DOM nodes is updated asynchronously.\r\n */\r\n SplitPanel.prototype.setRelativeSizes = function (sizes) {\r\n this.layout.setRelativeSizes(sizes);\r\n };\r\n /**\r\n * Handle the DOM events for the split panel.\r\n *\r\n * @param event - The DOM event sent to the panel.\r\n *\r\n * #### Notes\r\n * This method implements the DOM `EventListener` interface and is\r\n * called in response to events on the panel's DOM node. It should\r\n * not be called directly by user code.\r\n */\r\n SplitPanel.prototype.handleEvent = function (event) {\r\n switch (event.type) {\r\n case 'mousedown':\r\n this._evtMouseDown(event);\r\n break;\r\n case 'mousemove':\r\n this._evtMouseMove(event);\r\n break;\r\n case 'mouseup':\r\n this._evtMouseUp(event);\r\n break;\r\n case 'keydown':\r\n this._evtKeyDown(event);\r\n break;\r\n case 'contextmenu':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n }\r\n };\r\n /**\r\n * A message handler invoked on a `'before-attach'` message.\r\n */\r\n SplitPanel.prototype.onBeforeAttach = function (msg) {\r\n this.node.addEventListener('mousedown', this);\r\n };\r\n /**\r\n * A message handler invoked on an `'after-detach'` message.\r\n */\r\n SplitPanel.prototype.onAfterDetach = function (msg) {\r\n this.node.removeEventListener('mousedown', this);\r\n this._releaseMouse();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-added'` message.\r\n */\r\n SplitPanel.prototype.onChildAdded = function (msg) {\r\n msg.child.addClass('p-SplitPanel-child');\r\n this._releaseMouse();\r\n };\r\n /**\r\n * A message handler invoked on a `'child-removed'` message.\r\n */\r\n SplitPanel.prototype.onChildRemoved = function (msg) {\r\n msg.child.removeClass('p-SplitPanel-child');\r\n this._releaseMouse();\r\n };\r\n /**\r\n * Handle the `'keydown'` event for the split panel.\r\n */\r\n SplitPanel.prototype._evtKeyDown = function (event) {\r\n // Stop input events during drag.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Release the mouse if `Escape` is pressed.\r\n if (event.keyCode === 27) {\r\n this._releaseMouse();\r\n }\r\n };\r\n /**\r\n * Handle the `'mousedown'` event for the split panel.\r\n */\r\n SplitPanel.prototype._evtMouseDown = function (event) {\r\n // Do nothing if the left mouse button is not pressed.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Find the handle which contains the mouse target, if any.\r\n var layout = this.layout;\r\n var index = algorithm_1.ArrayExt.findFirstIndex(layout.handles, function (handle) {\r\n return handle.contains(event.target);\r\n });\r\n // Bail early if the mouse press was not on a handle.\r\n if (index === -1) {\r\n return;\r\n }\r\n // Stop the event when a split handle is pressed.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Add the extra document listeners.\r\n document.addEventListener('mouseup', this, true);\r\n document.addEventListener('mousemove', this, true);\r\n document.addEventListener('keydown', this, true);\r\n document.addEventListener('contextmenu', this, true);\r\n // Compute the offset delta for the handle press.\r\n var delta;\r\n var handle = layout.handles[index];\r\n var rect = handle.getBoundingClientRect();\r\n if (layout.orientation === 'horizontal') {\r\n delta = event.clientX - rect.left;\r\n }\r\n else {\r\n delta = event.clientY - rect.top;\r\n }\r\n // Override the cursor and store the press data.\r\n var style = window.getComputedStyle(handle);\r\n var override = dragdrop_1.Drag.overrideCursor(style.cursor);\r\n this._pressData = { index: index, delta: delta, override: override };\r\n };\r\n /**\r\n * Handle the `'mousemove'` event for the split panel.\r\n */\r\n SplitPanel.prototype._evtMouseMove = function (event) {\r\n // Stop the event when dragging a split handle.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Compute the desired offset position for the handle.\r\n var pos;\r\n var layout = this.layout;\r\n var rect = this.node.getBoundingClientRect();\r\n if (layout.orientation === 'horizontal') {\r\n pos = event.clientX - rect.left - this._pressData.delta;\r\n }\r\n else {\r\n pos = event.clientY - rect.top - this._pressData.delta;\r\n }\r\n // Move the handle as close to the desired position as possible.\r\n layout.moveHandle(this._pressData.index, pos);\r\n };\r\n /**\r\n * Handle the `'mouseup'` event for the split panel.\r\n */\r\n SplitPanel.prototype._evtMouseUp = function (event) {\r\n // Do nothing if the left mouse button is not released.\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n // Stop the event when releasing a handle.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Finalize the mouse release.\r\n this._releaseMouse();\r\n };\r\n /**\r\n * Release the mouse grab for the split panel.\r\n */\r\n SplitPanel.prototype._releaseMouse = function () {\r\n // Bail early if no drag is in progress.\r\n if (!this._pressData) {\r\n return;\r\n }\r\n // Clear the override cursor.\r\n this._pressData.override.dispose();\r\n this._pressData = null;\r\n // Remove the extra document listeners.\r\n document.removeEventListener('mouseup', this, true);\r\n document.removeEventListener('mousemove', this, true);\r\n document.removeEventListener('keydown', this, true);\r\n document.removeEventListener('contextmenu', this, true);\r\n };\r\n return SplitPanel;\r\n}(panel_1.Panel));\r\nexports.SplitPanel = SplitPanel;\r\n/**\r\n * The namespace for the `SplitPanel` class statics.\r\n */\r\n(function (SplitPanel) {\r\n /**\r\n * The default implementation of `IRenderer`.\r\n */\r\n var Renderer = /** @class */ (function () {\r\n function Renderer() {\r\n }\r\n /**\r\n * Create a new handle for use with a split panel.\r\n *\r\n * @returns A new handle element for a split panel.\r\n */\r\n Renderer.prototype.createHandle = function () {\r\n var handle = document.createElement('div');\r\n handle.className = 'p-SplitPanel-handle';\r\n return handle;\r\n };\r\n return Renderer;\r\n }());\r\n SplitPanel.Renderer = Renderer;\r\n /**\r\n * The default `Renderer` instance.\r\n */\r\n SplitPanel.defaultRenderer = new Renderer();\r\n /**\r\n * Get the split panel stretch factor for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @returns The split panel stretch factor for the widget.\r\n */\r\n function getStretch(widget) {\r\n return splitlayout_1.SplitLayout.getStretch(widget);\r\n }\r\n SplitPanel.getStretch = getStretch;\r\n /**\r\n * Set the split panel stretch factor for the given widget.\r\n *\r\n * @param widget - The widget of interest.\r\n *\r\n * @param value - The value for the stretch factor.\r\n */\r\n function setStretch(widget, value) {\r\n splitlayout_1.SplitLayout.setStretch(widget, value);\r\n }\r\n SplitPanel.setStretch = setStretch;\r\n})(SplitPanel = exports.SplitPanel || (exports.SplitPanel = {}));\r\nexports.SplitPanel = SplitPanel;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * Create a split layout for the given panel options.\r\n */\r\n function createLayout(options) {\r\n return options.layout || new splitlayout_1.SplitLayout({\r\n renderer: options.renderer || SplitPanel.defaultRenderer,\r\n orientation: options.orientation,\r\n alignment: options.alignment,\r\n spacing: options.spacing\r\n });\r\n }\r\n Private.createLayout = createLayout;\r\n})(Private || (Private = {}));\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n }\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*-----------------------------------------------------------------------------\r\n| Copyright (c) 2014-2017, PhosphorJS Contributors\r\n|\r\n| Distributed under the terms of the BSD 3-Clause License.\r\n|\r\n| The full license is in the file LICENSE, distributed with this software.\r\n|----------------------------------------------------------------------------*/\r\nvar domutils_1 = require(\"@phosphor/domutils\");\r\nvar messaging_1 = require(\"@phosphor/messaging\");\r\nvar signaling_1 = require(\"@phosphor/signaling\");\r\nvar boxlayout_1 = require(\"./boxlayout\");\r\nvar stackedpanel_1 = require(\"./stackedpanel\");\r\nvar tabbar_1 = require(\"./tabbar\");\r\nvar widget_1 = require(\"./widget\");\r\n/**\r\n * A widget which combines a `TabBar` and a `StackedPanel`.\r\n *\r\n * #### Notes\r\n * This is a simple panel which handles the common case of a tab bar\r\n * placed next to a content area. The selected tab controls the widget\r\n * which is shown in the content area.\r\n *\r\n * For use cases which require more control than is provided by this\r\n * panel, the `TabBar` widget may be used independently.\r\n */\r\nvar TabPanel = /** @class */ (function (_super) {\r\n __extends(TabPanel, _super);\r\n /**\r\n * Construct a new tab panel.\r\n *\r\n * @param options - The options for initializing the tab panel.\r\n */\r\n function TabPanel(options) {\r\n if (options === void 0) { options = {}; }\r\n var _this = _super.call(this) || this;\r\n _this._currentChanged = new signaling_1.Signal(_this);\r\n _this.addClass('p-TabPanel');\r\n // Create the tab bar and stacked panel.\r\n _this.tabBar = new tabbar_1.TabBar(options);\r\n _this.tabBar.addClass('p-TabPanel-tabBar');\r\n _this.stackedPanel = new stackedpanel_1.StackedPanel();\r\n _this.stackedPanel.addClass('p-TabPanel-stackedPanel');\r\n // Connect the tab bar signal handlers.\r\n _this.tabBar.tabMoved.connect(_this._onTabMoved, _this);\r\n _this.tabBar.currentChanged.connect(_this._onCurrentChanged, _this);\r\n _this.tabBar.tabCloseRequested.connect(_this._onTabCloseRequested, _this);\r\n _this.tabBar.tabActivateRequested.connect(_this._onTabActivateRequested, _this);\r\n // Connect the stacked panel signal handlers.\r\n _this.stackedPanel.widgetRemoved.connect(_this._onWidgetRemoved, _this);\r\n // Get the data related to the placement.\r\n _this._tabPlacement = options.tabPlacement || 'top';\r\n var direction = Private.directionFromPlacement(_this._tabPlacement);\r\n var orientation = Private.orientationFromPlacement(_this._tabPlacement);\r\n // Configure the tab bar for the placement.\r\n _this.tabBar.orientation = orientation;\r\n _this.tabBar.dataset['placement'] = _this._tabPlacement;\r\n // Create the box layout.\r\n var layout = new boxlayout_1.BoxLayout({ direction: direction, spacing: 0 });\r\n // Set the stretch factors for the child widgets.\r\n boxlayout_1.BoxLayout.setStretch(_this.tabBar, 0);\r\n boxlayout_1.BoxLayout.setStretch(_this.stackedPanel, 1);\r\n // Add the child widgets to the layout.\r\n layout.addWidget(_this.tabBar);\r\n layout.addWidget(_this.stackedPanel);\r\n // Install the layout on the tab panel.\r\n _this.layout = layout;\r\n return _this;\r\n }\r\n Object.defineProperty(TabPanel.prototype, \"currentChanged\", {\r\n /**\r\n * A signal emitted when the current tab is changed.\r\n *\r\n * #### Notes\r\n * This signal is emitted when the currently selected tab is changed\r\n * either through user or programmatic interaction.\r\n *\r\n * Notably, this signal is not emitted when the index of the current\r\n * tab changes due to tabs being inserted, removed, or moved. It is\r\n * only emitted when the actual current tab node is changed.\r\n */\r\n get: function () {\r\n return this._currentChanged;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabPanel.prototype, \"currentIndex\", {\r\n /**\r\n * Get the index of the currently selected tab.\r\n *\r\n * #### Notes\r\n * This will be `-1` if no tab is selected.\r\n */\r\n get: function () {\r\n return this.tabBar.currentIndex;\r\n },\r\n /**\r\n * Set the index of the currently selected tab.\r\n *\r\n * #### Notes\r\n * If the index is out of range, it will be set to `-1`.\r\n */\r\n set: function (value) {\r\n this.tabBar.currentIndex = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabPanel.prototype, \"currentWidget\", {\r\n /**\r\n * Get the currently selected widget.\r\n *\r\n * #### Notes\r\n * This will be `null` if there is no selected tab.\r\n */\r\n get: function () {\r\n var title = this.tabBar.currentTitle;\r\n return title ? title.owner : null;\r\n },\r\n /**\r\n * Set the currently selected widget.\r\n *\r\n * #### Notes\r\n * If the widget is not in the panel, it will be set to `null`.\r\n */\r\n set: function (value) {\r\n this.tabBar.currentTitle = value ? value.title : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabPanel.prototype, \"tabsMovable\", {\r\n /**\r\n * Get the whether the tabs are movable by the user.\r\n *\r\n * #### Notes\r\n * Tabs can always be moved programmatically.\r\n */\r\n get: function () {\r\n return this.tabBar.tabsMovable;\r\n },\r\n /**\r\n * Set the whether the tabs are movable by the user.\r\n *\r\n * #### Notes\r\n * Tabs can always be moved programmatically.\r\n */\r\n set: function (value) {\r\n this.tabBar.tabsMovable = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabPanel.prototype, \"tabPlacement\", {\r\n /**\r\n * Get the tab placement for the tab panel.\r\n *\r\n * #### Notes\r\n * This controls the position of the tab bar relative to the content.\r\n */\r\n get: function () {\r\n return this._tabPlacement;\r\n },\r\n /**\r\n * Set the tab placement for the tab panel.\r\n *\r\n * #### Notes\r\n * This controls the position of the tab bar relative to the content.\r\n */\r\n set: function (value) {\r\n // Bail if the placement does not change.\r\n if (this._tabPlacement === value) {\r\n return;\r\n }\r\n // Update the internal value.\r\n this._tabPlacement = value;\r\n // Get the values related to the placement.\r\n var direction = Private.directionFromPlacement(value);\r\n var orientation = Private.orientationFromPlacement(value);\r\n // Configure the tab bar for the placement.\r\n this.tabBar.orientation = orientation;\r\n this.tabBar.dataset['placement'] = value;\r\n // Update the layout direction.\r\n this.layout.direction = direction;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TabPanel.prototype, \"widgets\", {\r\n /**\r\n * A read-only array of the widgets in the panel.\r\n */\r\n get: function () {\r\n return this.stackedPanel.widgets;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Add a widget to the end of the tab panel.\r\n *\r\n * @param widget - The widget to add to the tab panel.\r\n *\r\n * #### Notes\r\n * If the widget is already contained in the panel, it will be moved.\r\n *\r\n * The widget's `title` is used to populate the tab.\r\n */\r\n TabPanel.prototype.addWidget = function (widget) {\r\n this.insertWidget(this.widgets.length, widget);\r\n };\r\n /**\r\n * Insert a widget into the tab panel at a specified index.\r\n *\r\n * @param index - The index at which to insert the widget.\r\n *\r\n * @param widget - The widget to insert into to the tab panel.\r\n *\r\n * #### Notes\r\n * If the widget is already contained in the panel, it will be moved.\r\n *\r\n * The widget's `title` is used to populate the tab.\r\n */\r\n TabPanel.prototype.insertWidget = function (index, widget) {\r\n if (widget !== this.currentWidget) {\r\n widget.hide();\r\n }\r\n this.stackedPanel.insertWidget(index, widget);\r\n this.tabBar.insertTab(index, widget.title);\r\n };\r\n /**\r\n * Handle the `currentChanged` signal from the tab bar.\r\n */\r\n TabPanel.prototype._onCurrentChanged = function (sender, args) {\r\n // Extract the previous and current title from the args.\r\n var previousIndex = args.previousIndex, previousTitle = args.previousTitle, currentIndex = args.currentIndex, currentTitle = args.currentTitle;\r\n // Extract the widgets from the titles.\r\n var previousWidget = previousTitle ? previousTitle.owner : null;\r\n var currentWidget = currentTitle ? currentTitle.owner : null;\r\n // Hide the previous widget.\r\n if (previousWidget) {\r\n previousWidget.hide();\r\n }\r\n // Show the current widget.\r\n if (currentWidget) {\r\n currentWidget.show();\r\n }\r\n // Emit the `currentChanged` signal for the tab panel.\r\n this._currentChanged.emit({\r\n previousIndex: previousIndex, previousWidget: previousWidget, currentIndex: currentIndex, currentWidget: currentWidget\r\n });\r\n // Flush the message loop on IE and Edge to prevent flicker.\r\n if (domutils_1.Platform.IS_EDGE || domutils_1.Platform.IS_IE) {\r\n messaging_1.MessageLoop.flush();\r\n }\r\n };\r\n /**\r\n * Handle the `tabActivateRequested` signal from the tab bar.\r\n */\r\n TabPanel.prototype._onTabActivateRequested = function (sender, args) {\r\n args.title.owner.activate();\r\n };\r\n /**\r\n * Handle the `tabCloseRequested` signal from the tab bar.\r\n */\r\n TabPanel.prototype._onTabCloseRequested = function (sender, args) {\r\n args.title.owner.close();\r\n };\r\n /**\r\n * Handle the `tabMoved` signal from the tab bar.\r\n */\r\n TabPanel.prototype._onTabMoved = function (sender, args) {\r\n this.stackedPanel.insertWidget(args.toIndex, args.title.owner);\r\n };\r\n /**\r\n * Handle the `widgetRemoved` signal from the stacked panel.\r\n */\r\n TabPanel.prototype._onWidgetRemoved = function (sender, widget) {\r\n this.tabBar.removeTab(widget.title);\r\n };\r\n return TabPanel;\r\n}(widget_1.Widget));\r\nexports.TabPanel = TabPanel;\r\n/**\r\n * The namespace for the module implementation details.\r\n */\r\nvar Private;\r\n(function (Private) {\r\n /**\r\n * Convert a tab placement to tab bar orientation.\r\n */\r\n function orientationFromPlacement(plc) {\r\n return placementToOrientationMap[plc];\r\n }\r\n Private.orientationFromPlacement = orientationFromPlacement;\r\n /**\r\n * Convert a tab placement to a box layout direction.\r\n */\r\n function directionFromPlacement(plc) {\r\n return placementToDirectionMap[plc];\r\n }\r\n Private.directionFromPlacement = directionFromPlacement;\r\n /**\r\n * A mapping of tab placement to tab bar orientation.\r\n */\r\n var placementToOrientationMap = {\r\n 'top': 'horizontal',\r\n 'left': 'vertical',\r\n 'right': 'vertical',\r\n 'bottom': 'horizontal'\r\n };\r\n /**\r\n * A mapping of tab placement to box layout direction.\r\n */\r\n var placementToDirectionMap = {\r\n 'top': 'top-to-bottom',\r\n 'left': 'left-to-right',\r\n 'right': 'right-to-left',\r\n 'bottom': 'bottom-to-top'\r\n };\r\n})(Private || (Private = {}));\r\n","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst serialize = __importStar(require(\"./serialize\"));\nconst version_1 = require(\"./version\");\nclass AxisModel extends widgets.WidgetModel {\n defaults() {\n return Object.assign({}, widgets.WidgetModel.prototype.defaults(), { _model_name: \"AxisModel\", _view_name: \"Axis\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, orientation: \"horizontal\", side: null, label: \"\", grid_lines: \"solid\", tick_format: null, scale: undefined, num_ticks: null, tick_values: [], offset: {}, label_location: \"middle\", label_color: null, grid_color: null, color: null, label_offset: null, visible: true, tick_style: {}, tick_rotate: 0 });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on(\"change:side\", this.validate_orientation, this);\n this.on(\"change:orientation\", this.validate_side, this);\n this.validate_orientation();\n this.validate_side();\n }\n validate_side() {\n const orientation = this.get('orientation');\n const side = this.get('side');\n if (orientation === 'vertical') {\n if (side !== 'left' && side !== 'right') {\n this.set('side', 'left');\n }\n }\n else {\n if (side !== 'bottom' && side !== 'top') {\n this.set('side', 'bottom');\n }\n }\n this.save_changes();\n }\n validate_orientation() {\n const side = this.get('side');\n if (side) {\n if (side === 'left' || side === 'right') {\n this.set('orientation', 'vertical');\n }\n else {\n this.set('orientation', 'horizontal');\n }\n this.save_changes();\n }\n }\n}\nAxisModel.serializers = Object.assign({}, widgets.WidgetModel.serializers, { scale: { deserialize: widgets.unpack_models }, offset: { deserialize: widgets.unpack_models }, tick_values: serialize.array_or_json });\nexports.AxisModel = AxisModel;\nclass ColorAxisModel extends AxisModel {\n defaults() {\n return Object.assign({}, AxisModel.prototype.defaults(), { _model_name: \"ColorAxisModel\", _view_name: \"ColorAxis\" });\n }\n}\nexports.ColorAxisModel = ColorAxisModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXhpc01vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0F4aXNNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsK0RBQWlEO0FBQ2pELHVEQUF5QztBQUN6Qyx1Q0FBeUM7QUFFekMsTUFDTSxTQUFVLFNBQVEsT0FBTyxDQUFDLFdBQVc7SUFFdkMsUUFBUTtRQUNKLHlCQUFXLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUMvQyxXQUFXLEVBQUUsV0FBVyxFQUN4QixVQUFVLEVBQUUsTUFBTSxFQUNsQixhQUFhLEVBQUUsUUFBUSxFQUN2QixZQUFZLEVBQUUsUUFBUSxFQUN0QixxQkFBcUIsRUFBRSxzQkFBWSxFQUNuQyxvQkFBb0IsRUFBRSxzQkFBWSxFQUVsQyxXQUFXLEVBQUUsWUFBWSxFQUN6QixJQUFJLEVBQUUsSUFBSSxFQUNWLEtBQUssRUFBRSxFQUFFLEVBQ1QsVUFBVSxFQUFFLE9BQU8sRUFDbkIsV0FBVyxFQUFFLElBQUksRUFDakIsS0FBSyxFQUFFLFNBQVMsRUFDaEIsU0FBUyxFQUFFLElBQUksRUFDZixXQUFXLEVBQUUsRUFBRSxFQUNmLE1BQU0sRUFBRSxFQUFFLEVBQ1YsY0FBYyxFQUFFLFFBQVEsRUFDeEIsV0FBVyxFQUFFLElBQUksRUFDakIsVUFBVSxFQUFFLElBQUksRUFDaEIsS0FBSyxFQUFFLElBQUksRUFDWCxZQUFZLEVBQUUsSUFBSSxFQUNsQixPQUFPLEVBQUUsSUFBSSxFQUNiLFVBQVUsRUFBRSxFQUFFLEVBQ2QsV0FBVyxFQUFFLENBQUMsSUFDaEI7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPO1FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhO1FBQ1QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLElBQUcsV0FBVyxLQUFLLFVBQVUsRUFBRTtZQUMzQixJQUFJLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDNUI7U0FDSjthQUFNO1lBQ0gsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzlCO1NBQ0o7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBRyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZDO2lCQUFNO2dCQUNILElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQ3pDO1lBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQzs7QUFFTSxxQkFBVyxxQkFDWCxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFDbEMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFDN0MsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFDOUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxhQUFhLElBQ3RDO0FBeEVOLDhCQXlFQztBQUVELE1BQWEsY0FBZSxTQUFRLFNBQVM7SUFFekMsUUFBUTtRQUNKLHlCQUFXLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3JDLFdBQVcsRUFBRSxnQkFBZ0IsRUFDN0IsVUFBVSxFQUFFLFdBQVcsSUFDekI7SUFDTixDQUFDO0NBQ0o7QUFSRCx3Q0FRQyJ9","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-selection\"));\nconst utils = __importStar(require(\"./utils\"));\nconst Interaction_1 = require(\"./Interaction\");\nconst convert_dates = require('./utils').convert_dates;\nclass HandDraw extends Interaction_1.Interaction {\n render() {\n super.render();\n this.d3el.style(\"cursor\", \"crosshair\");\n this.active = false;\n // Register the mouse callback when the mark view promises are\n // resolved.\n this.set_lines_view().then(() => {\n this.d3el.on(\"mousedown\", () => {\n return this.mousedown();\n });\n this.set_limits();\n });\n // Update line index\n this.update_line_index();\n this.listenTo(this.model, \"change:line_index\", this.update_line_index);\n this.model.on_some_change([\"min_x\", \"max_x\"], this.set_limits, this);\n }\n set_lines_view() {\n const fig = this.parent;\n const lines_model = this.model.get(\"lines\");\n return Promise.all(fig.mark_views.views).then((views) => {\n const fig_mark_ids = fig.mark_views._models.map((mark_model) => {\n return mark_model.model_id; // Model ids of the marks in the figure\n });\n const mark_index = fig_mark_ids.indexOf(lines_model.model_id);\n this.lines_view = views[mark_index];\n });\n }\n mousedown() {\n this.active = true;\n this.mouse_entry(false);\n this.d3el.on(\"mousemove\", () => { this.mousemove(); });\n this.d3el.on(\"mouseleave\", () => { this.mouseup(); });\n this.d3el.on(\"mouseup\", () => { this.mouseup(); });\n }\n mouseup() {\n if (this.active) {\n this.mouse_entry(true);\n const lines_model = this.model.get(\"lines\");\n lines_model.set(\"y\", convert_dates(utils.deepCopy(lines_model.y_data)));\n this.lines_view.touch();\n this.active = false;\n this.d3el.on(\"mousemove\", null);\n this.d3el.on(\"mouseleave\", null);\n this.d3el.on(\"mouseup\", null);\n }\n }\n mousemove() {\n this.mouse_entry(true);\n }\n mouse_entry(memory) {\n // If memory is set to true, itermediate positions between the last\n // position of the mouse and the current one will be interpolated.\n if (this.active) {\n const lines_model = this.model.get(\"lines\");\n const xindex = Math.min(this.line_index, lines_model.x_data.length - 1);\n const mouse_pos = d3.mouse(this.el);\n if (!memory || !(\"previous_pos\" in this)) {\n this.previous_pos = mouse_pos;\n }\n const scale_x = this.lines_view.scales.x.scale;\n const scale_y = this.lines_view.scales.y.scale;\n const newx = scale_x.invert(mouse_pos[0]);\n const newy = scale_y.invert(mouse_pos[1]);\n const oldx = scale_x.invert(this.previous_pos[0]);\n scale_y.invert(this.previous_pos[1]);\n const old_index = this.nns(lines_model.x_data[xindex], oldx);\n const new_index = this.nns(lines_model.x_data[xindex], newx);\n const min = Math.min(old_index, new_index);\n const max = Math.max(old_index, new_index);\n for (let i = min; i <= max; ++i) {\n if ((!(this.valid_min) ||\n lines_model.x_data[xindex][i] >= this.min_x) &&\n ((!this.valid_max) ||\n lines_model.x_data[xindex][i] <= this.max_x)) {\n lines_model.y_data[this.line_index][i] = newy;\n }\n }\n const xy_data = lines_model.x_data[xindex].map((d, i) => {\n return {\n x: d,\n y: lines_model.y_data[this.line_index][i]\n };\n });\n this.lines_view.d3el.select(\"#curve\" + (this.line_index + 1))\n .attr(\"d\", function (d) {\n return this.lines_view.line(xy_data);\n }.bind(this));\n this.previous_pos = mouse_pos;\n }\n }\n capnfloor(val) {\n // Not taking into account the position of the mouse beyond min_x\n // and max_x\n return Math.max(Math.min(val, this.model.get(\"max_x\")), this.model.get(\"min_x\"));\n }\n set_limits() {\n const is_date = (this.lines_view.scales.x.model.type == \"date\");\n if (is_date) {\n this.min_x = utils.getDate(this.model.get(\"min_x\"));\n this.valid_min = !(this.min_x === null ||\n this.min_x === undefined ||\n isNaN(this.min_x.getTime()));\n this.max_x = utils.getDate(this.model.get(\"max_x\"));\n this.valid_max = !(this.max_x === null ||\n this.max_x === undefined ||\n isNaN(this.max_x.getTime()));\n }\n else {\n this.min_x = this.model.get(\"min_x\");\n this.max_x = this.model.get(\"max_x\");\n this.valid_min = !(this.min_x === null ||\n this.min_x === undefined);\n this.valid_max = !(this.max_x === null ||\n this.max_x === undefined);\n }\n }\n nns(x_data, x) {\n // Nearest neighbor search\n const idx = this.lines_view.bisect(x_data, x);\n if (x - x_data[idx - 1] > x_data[idx] - x) {\n return idx;\n }\n else {\n return idx - 1;\n }\n }\n update_line_index() {\n // Called when the line index is changed in the model\n this.line_index = this.model.get(\"line_index\");\n }\n}\nexports.HandDraw = HandDraw;\n;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFuZERyYXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvSGFuZERyYXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QixzREFBc0Q7QUFDdEQsK0NBQWlDO0FBQ2pDLCtDQUE0QztBQUM1QyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDO0FBRXZELE1BQWEsUUFBUyxTQUFRLHlCQUFXO0lBRXJDLE1BQU07UUFDRixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFcEIsOERBQThEO1FBQzlELFlBQVk7UUFDWixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUVILG9CQUFvQjtRQUNwQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsY0FBYztR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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\n// import * as d3 from 'd3';\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-scale\"), require(\"d3-selection-multi\"));\n// Hack to fix problem with webpack providing multiple d3 objects\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst _ = __importStar(require(\"underscore\"));\nconst Mark_1 = require(\"./Mark\");\nclass Bars extends Mark_1.Mark {\n render() {\n const base_creation_promise = super.render.apply(this);\n this.set_internal_scales();\n this.selected_indices = this.model.get(\"selected\");\n this.selected_style = this.model.get(\"selected_style\");\n this.unselected_style = this.model.get(\"unselected_style\");\n this.display_el_classes = [\"bar\", \"legendtext\"];\n this.displayed.then(() => {\n this.parent.tooltip_div.node().appendChild(this.tooltip_div.node());\n this.create_tooltip();\n });\n return base_creation_promise.then(() => {\n this.event_listeners = {};\n this.process_interactions();\n this.create_listeners();\n this.compute_view_padding();\n this.draw();\n });\n }\n set_scale_orientation() {\n // TODO: we should probably use this.model.get(\"orientation\")?\n // var orient = this.model.get(\"orientation\");\n this.dom_scale = this.scales.x; //(orient === \"vertical\") ? this.scales.x : this.scales.y;\n this.range_scale = this.scales.y; //(orient === \"vertical\") ? this.scales.y : this.scales.x;\n }\n set_ranges() {\n const orient = this.model.get(\"orientation\");\n this.set_scale_orientation();\n const dom_scale = this.dom_scale;\n const range_scale = this.range_scale;\n const dom = (orient === \"vertical\") ? \"x\" : \"y\";\n const rang = (orient === \"vertical\") ? \"y\" : \"x\";\n if (dom_scale.model.type !== \"ordinal\") {\n dom_scale.set_range(this.parent.padded_range(dom, dom_scale.model));\n }\n else {\n dom_scale.set_range(this.parent.padded_range(dom, dom_scale.model), this.model.get(\"padding\"));\n }\n range_scale.set_range(this.parent.padded_range(rang, range_scale.model));\n // x_offset is set later by the adjust_offset method\n // This differs because it is not constant for a scale.\n // Changes based on the data.\n this.dom_offset = 0;\n this.range_offset = (orient === \"vertical\") ? range_scale.offset : -range_scale.offset;\n }\n set_positional_scales() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n }\n set_internal_scales() {\n // Two scales to draw the bars.\n this.x = d3.scaleBand();\n this.x1 = d3.scaleBand();\n }\n adjust_offset() {\n // In the case of a linear scale, and when plotting ordinal data,\n // the value have to be negatively offset by half of the width of\n // the bars, because ordinal scales give the values corresponding\n // to the start of the bin but linear scale gives the actual value.\n const dom_scale = this.dom_scale;\n if (dom_scale.model.type !== \"ordinal\") {\n if (this.model.get(\"align\") === \"center\") {\n this.dom_offset = -(this.x.bandwidth() / 2).toFixed(2);\n }\n else if (this.model.get(\"align\") === \"left\") {\n this.dom_offset = -(this.x.bandwidth()).toFixed(2);\n }\n else {\n this.dom_offset = 0;\n }\n }\n else {\n if (this.model.get(\"align\") === \"center\") {\n this.dom_offset = 0;\n }\n else if (this.model.get(\"align\") === \"left\") {\n this.dom_offset = -(this.x.bandwidth() / 2);\n }\n else {\n this.dom_offset = (this.x.bandwidth() / 2);\n }\n }\n }\n create_listeners() {\n super.create_listeners.apply(this);\n this.d3el\n .on(\"mouseover\", _.bind(function () {\n this.event_dispatcher(\"mouse_over\");\n }, this))\n .on(\"mousemove\", _.bind(function () {\n this.event_dispatcher(\"mouse_move\");\n }, this))\n .on(\"mouseout\", _.bind(function () {\n this.event_dispatcher(\"mouse_out\");\n }, this));\n this.listenTo(this.model, \"data_updated\", function () {\n //animate bars on data update\n const animate = true;\n this.draw(animate);\n });\n this.listenTo(this.model, \"change:colors\", this.update_colors);\n this.listenTo(this.model, \"colors_updated\", this.update_colors);\n this.listenTo(this.model, \"change:type\", this.update_type);\n // FIXME: These are expensive calls for changing padding and align\n this.listenTo(this.model, \"change:align\", this.relayout);\n this.listenTo(this.model, \"change:padding\", this.relayout);\n this.listenTo(this.model, \"change:orientation\", this.relayout);\n this.listenTo(this.model, \"change:tooltip\", this.create_tooltip);\n this.model.on_some_change(['stroke', 'opacities', 'fill', 'stroke_width'], this.apply_styles, this);\n this.listenTo(this.model, \"change:selected\", this.update_selected);\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n this.listenTo(this.parent, \"bg_clicked\", function () {\n this.event_dispatcher(\"parent_clicked\");\n });\n this.model.on_some_change([\n \"label_display_format\",\n \"label_font_style\",\n \"label_display\",\n \"label_display_vertical_offset\",\n \"label_display_horizontal_offset\"\n ], this.draw, this);\n }\n process_click(interaction) {\n super.process_click(interaction);\n if (interaction === \"select\") {\n this.event_listeners.parent_clicked = this.reset_selection;\n this.event_listeners.element_clicked = this.bar_click_handler;\n }\n }\n draw_zero_line() {\n this.set_scale_orientation();\n const range_scale = this.range_scale;\n const orient = this.model.get(\"orientation\");\n if (orient === \"vertical\") {\n this.d3el.select(\".zeroLine\")\n .attr(\"x1\", 0)\n .attr(\"x2\", this.parent.plotarea_width)\n .attr(\"y1\", range_scale.scale(this.model.base_value))\n .attr(\"y2\", range_scale.scale(this.model.base_value));\n }\n else {\n this.d3el.select(\".zeroLine\")\n .attr(\"x1\", range_scale.scale(this.model.base_value))\n .attr(\"x2\", range_scale.scale(this.model.base_value))\n .attr(\"y1\", 0)\n .attr(\"y2\", this.parent.plotarea_height);\n }\n }\n relayout() {\n this.set_ranges();\n this.compute_view_padding();\n this.draw_zero_line();\n this.x.rangeRound(this.set_x_range());\n this.x.padding(this.model.get(\"padding\"));\n this.adjust_offset();\n this.x1.rangeRound([0, this.x.bandwidth().toFixed(2)]);\n this.draw_bars();\n }\n invert_point(pixel) {\n if (pixel === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return;\n }\n const abs_diff = this.x_pixels.map(function (elem) { return Math.abs(elem - pixel); });\n this.model.set(\"selected\", new Uint32Array([abs_diff.indexOf(d3.min(abs_diff))]));\n this.touch();\n }\n selector_changed(point_selector, rect_selector) {\n if (point_selector === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return [];\n }\n const pixels = this.pixel_coords;\n const indices = new Uint32Array(_.range(pixels.length));\n // Here we only select bar groups. It shouldn't be too hard to select\n // individual bars, the `selected` attribute would then be a list of pairs.\n const selected_groups = indices.filter(index => {\n let bars = pixels[index];\n for (let i = 0; i < bars.length; i++) {\n if (rect_selector(bars[i])) {\n return true;\n }\n }\n return false;\n });\n this.model.set(\"selected\", selected_groups);\n this.touch();\n }\n update_selected(model, value) {\n this.selected_indices = value;\n this.apply_styles();\n }\n draw(animate) {\n this.set_ranges();\n const that = this;\n let bar_groups = this.d3el.selectAll(\".bargroup\")\n .data(this.model.mark_data, function (d) {\n return d.key;\n });\n const dom_scale = this.dom_scale;\n // this.x is the ordinal scale used to draw the bars. If a linear\n // scale is given, then the ordinal scale is created from the\n // linear scale.\n if (dom_scale.model.type !== \"ordinal\") {\n const model_domain = this.model.mark_data.map(function (elem) {\n return elem.key;\n });\n this.x.domain(model_domain);\n }\n else {\n this.x.domain(dom_scale.scale.domain());\n }\n this.x.rangeRound(this.set_x_range());\n this.x.padding(this.model.get(\"padding\"));\n this.adjust_offset();\n this.x1.rangeRound([0, this.x.bandwidth().toFixed(2)]);\n if (this.model.mark_data.length > 0) {\n this.x1.domain(_.range(this.model.mark_data[0].values.length))\n .rangeRound([0, this.x.bandwidth().toFixed(2)]);\n }\n // Since we will assign the enter and update selection of bar_groups to\n // itself, we may remove exit selection first.\n bar_groups.exit().remove();\n bar_groups = bar_groups.enter()\n .append(\"g\")\n .attr(\"class\", \"bargroup\")\n .merge(bar_groups);\n // The below function sorts the DOM elements so that the order of\n // the DOM elements matches the order of the data they are bound\n // to. This is required to maintain integrity with selection.\n bar_groups.order();\n bar_groups.on(\"click\", function (d, i) {\n return that.event_dispatcher(\"element_clicked\", { \"data\": d, \"index\": i });\n });\n const bars_sel = bar_groups.selectAll(\".bar\")\n .data(function (d) {\n return d.values;\n });\n // default values for width and height are to ensure smooth\n // transitions\n bars_sel.enter()\n .append(\"rect\")\n .attr(\"class\", \"bar\")\n .attr(\"width\", 0)\n .attr(\"height\", 0);\n bars_sel.exit().remove();\n if (!this.model.get(\"label_display\")) {\n bar_groups.selectAll(\"text\").remove();\n }\n if (this.model.get(\"label_display\")) {\n const bar_labels = bar_groups.selectAll(\".bar_label\")\n .data(function (d) {\n return d.values;\n });\n bar_labels.exit().remove();\n bar_labels.enter()\n .append(\"text\")\n .attr(\"class\", \"bar_label\")\n .attr(\"width\", 0)\n .attr(\"height\", 0);\n }\n this.draw_bars(animate);\n // this.draw_bar_labels(); TODO\n this.apply_styles();\n this.d3el.selectAll(\".zeroLine\").remove();\n this.d3el.append(\"g\")\n .append(\"line\")\n .attr(\"class\", \"zeroLine\");\n this.draw_zero_line();\n }\n draw_bars(animate) {\n const bar_groups = this.d3el.selectAll(\".bargroup\");\n const bars_sel = bar_groups.selectAll(\".bar\");\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n // We need two different transitions because draw_bars can be called in the following cases:\n // - after the scale has been updated, in that case animate === false\n // - after the data has been updated, in that case animate === true\n // However, if we use the same transition, the animation_duration won't be updated and the\n // \"immediate\" transition will always be used...\n const transition_name = animate === true ? \"update_bars\" : \"draw_bars\";\n const that = this;\n const orient = this.model.get(\"orientation\");\n const dom_scale = this.dom_scale;\n const range_scale = this.range_scale;\n const dom = (orient === \"vertical\") ? \"x\" : \"y\";\n const rang = (orient === \"vertical\") ? \"y\" : \"x\";\n const dom_control = (orient === \"vertical\") ? \"width\" : \"height\";\n const rang_control = (orient === \"vertical\") ? \"height\" : \"width\";\n if (dom_scale.model.type === \"ordinal\") {\n const dom_max = d3.max(this.parent.range(dom));\n bar_groups.attr(\"transform\", function (d) {\n if (orient === \"vertical\") {\n return \"translate(\" + ((dom_scale.scale(d.key) !== undefined ?\n dom_scale.scale(d.key) : dom_max) + that.dom_offset) + \", 0)\";\n }\n else {\n return \"translate(0, \" + ((dom_scale.scale(d.key) !== undefined ?\n dom_scale.scale(d.key) : dom_max) + that.dom_offset) + \")\";\n }\n });\n }\n else {\n bar_groups.attr(\"transform\", function (d) {\n if (orient === \"vertical\") {\n return \"translate(\" + (dom_scale.scale(d.key) + that.dom_offset) + \", 0)\";\n }\n else {\n return \"translate(0, \" + (dom_scale.scale(d.key) + that.dom_offset) + \")\";\n }\n });\n }\n const is_stacked = (this.model.get(\"type\") === \"stacked\");\n let band_width = 1.0;\n if (is_stacked) {\n band_width = Math.max(1.0, this.x.bandwidth());\n bars_sel.transition(transition_name).duration(animation_duration)\n .attr(dom, 0)\n .attr(dom_control, band_width.toFixed(2))\n .attr(rang, function (d) {\n return (rang === \"y\") ? range_scale.scale(d.y1) : range_scale.scale(d.y0);\n })\n .attr(rang_control, function (d) {\n return Math.abs(range_scale.scale(d.y1 + d.y_ref) - range_scale.scale(d.y1));\n });\n }\n else {\n band_width = Math.max(1.0, this.x1.bandwidth());\n bars_sel.transition(transition_name).duration(animation_duration)\n .attr(dom, function (datum, index) {\n return that.x1(index);\n })\n .attr(dom_control, band_width.toFixed(2))\n .attr(rang, function (d) {\n return d3.min([range_scale.scale(d.y), range_scale.scale(that.model.base_value)]);\n })\n .attr(rang_control, function (d) {\n return Math.abs(range_scale.scale(that.model.base_value) - (range_scale.scale(d.y)));\n });\n }\n // adding/updating bar data labels\n this.manageBarLabels(bar_groups, band_width, dom, rang);\n this.pixel_coords = this.model.mark_data.map(function (d) {\n const key = d.key;\n const group_dom = dom_scale.scale(key) + that.dom_offset;\n return d.values.map(function (d) {\n const rect_coords = {};\n rect_coords[dom] = is_stacked ? group_dom : group_dom + that.x1(d.sub_index);\n rect_coords[rang] = is_stacked ?\n (rang === \"y\") ? range_scale.scale(d.y1) : range_scale.scale(d.y0) :\n d3.min([range_scale.scale(d.y), range_scale.scale(that.model.base_value)]);\n rect_coords[dom_control] = band_width;\n rect_coords[rang_control] = is_stacked ?\n Math.abs(range_scale.scale(d.y1 + d.y_ref) - range_scale.scale(d.y1)) :\n Math.abs(range_scale.scale(that.model.base_value) - (range_scale.scale(d.y_ref)));\n return [[rect_coords[\"x\"], rect_coords[\"x\"] + rect_coords[\"width\"]],\n [rect_coords[\"y\"], rect_coords[\"y\"] + rect_coords[\"height\"]]];\n });\n });\n this.x_pixels = this.model.mark_data.map(function (el) {\n return dom_scale.scale(el.key) + dom_scale.offset;\n });\n }\n ///////////////////\n /// Getters ///\n ///////////////////\n /**\n * Get the vertical label offset from the model\n */\n get offsetVertical() {\n return this.model.get(\"label_display_vertical_offset\");\n }\n /**\n * Get the horizontal label offset from the model\n */\n get offsetHorizontal() {\n return this.model.get(\"label_display_horizontal_offset\");\n }\n /**\n * Get the baseline parameter from the model\n */\n get baseLine() {\n return this.model.get(\"base\");\n }\n /**\n * Get the bar chart's orientation\n */\n get barOrientation() {\n return this.model.get(\"orientation\");\n }\n //////////////////\n /// Bar labels ///\n //////////////////\n /**\n * Main entry point function for adding bar labels\n * @param barGroups - D3 selection for all bar groups\n * @param bandWidth - Bandwidth of the x or y axis\n * @param dom - X or y axis (depending on oridnetation)\n * @param rang - X or y axis (depending on orientation)\n */\n manageBarLabels(barGroups, bandWidth, dom, rang) {\n if (!this.model.get(\"label_display\")) {\n return;\n }\n // Ladding the labels\n if (this.model.get(\"type\") === \"stacked\") {\n this.stackedBarLabels(barGroups, bandWidth, dom, rang);\n }\n else {\n this.groupedBarLabels(barGroups, bandWidth);\n }\n // Styling the labels\n this.updateBarLabelsStyle();\n }\n /**\n * All bars are stacked by default. The only other value this parameter can take is 'grouped'\n * @param barGroups - D3 selection for bar groups\n * @param bandWidth - Bandwidth parameter for the bar dimensions\n * @param dom - X or y axis (depending on oridnetation)\n * @param rang - X or y axis (depending on oridnetation)\n */\n stackedBarLabels(barGroups, bandWidth, dom, rang) {\n const baseLine = this.baseLine;\n const barOrientation = this.barOrientation;\n const barLabels = barGroups.selectAll(\".bar_label\");\n barLabels\n .attr(dom, d => 0)\n .attr(rang, d => {\n if (d.y <= baseLine) {\n return this.range_scale.scale(d.y0);\n }\n else {\n return this.range_scale.scale(d.y1);\n }\n })\n .style(\"font-weight\", \"400\")\n .style(\"text-anchor\", (d, i) => {\n return this.styleBarLabelTextAnchor(d, barOrientation, baseLine);\n })\n .style(\"dominant-baseline\", (d, i) => {\n return this.styleBarLabelDominantBaseline(d, baseLine, barOrientation);\n })\n .attr(\"transform\", (d, i) => {\n return this.transformBarLabel(d, baseLine, this.offsetHorizontal, this.offsetVertical, bandWidth, barOrientation);\n });\n }\n /**\n * Add labels for a chart with grouped bars\n * @param barGroups - D3 selection for bar group\n * @param bandWidth - bandwidth parameter for the X axis\n */\n groupedBarLabels(barGroups, bandWidth) {\n const baseLine = this.baseLine;\n const barOrientation = this.barOrientation;\n const barLabels = barGroups.selectAll(\".bar_label\");\n barLabels\n .attr(\"x\", (d, i) => {\n if (barOrientation === \"horizontal\") {\n return this.range_scale.scale(d.y);\n }\n else {\n return this.x1(i);\n }\n })\n .attr(\"y\", (d, i) => {\n if (barOrientation === \"horizontal\") {\n return this.x1(i);\n }\n else {\n return this.range_scale.scale(d.y);\n }\n })\n .style(\"font-weight\", \"400\")\n .style(\"text-anchor\", (d, i) => {\n return this.styleBarLabelTextAnchor(d, barOrientation, baseLine);\n })\n .style(\"dominant-baseline\", (d, i) => {\n return this.styleBarLabelDominantBaseline(d, baseLine, barOrientation);\n })\n .attr(\"transform\", (d, i) => {\n return this.transformBarLabel(d, baseLine, this.offsetHorizontal, this.offsetVertical, bandWidth, barOrientation);\n });\n }\n /**\n * Applies CSS translate to shift label position according\n * to vertical/horizontal offsets\n * @param d - Data point\n * @param baseLine - The base line of the chart\n * @param offsetHorizontal - Horizontal offset, in pixels, of the label\n * @param offsetVertical - Vertical offset, in pixels, of the label\n * @param bandWidth - Bandwidth parameter for the bar dimantions\n * @param barOrientation - Orientation of the bar chart (horizontal/vertical)\n */\n transformBarLabel(d, baseLine, offsetHorizontal, offsetVertical, bandWidth, barOrientation) {\n if (barOrientation === \"horizontal\") {\n return (d.y <= baseLine)\n ? `translate(${(d.y0 <= baseLine)\n ? (0 - offsetVertical)\n : (0 + offsetVertical)}, ${bandWidth / 2 + offsetHorizontal})`\n : `translate(${(d.y1 <= baseLine)\n ? (0 - offsetVertical)\n : (0 + offsetVertical)}, ${bandWidth / 2 + offsetHorizontal})`;\n }\n else {\n return (d.y <= baseLine)\n ? `translate(${bandWidth / 2 + offsetHorizontal},\n ${(d.y0 <= baseLine)\n ? (0 - offsetVertical)\n : (0 + offsetVertical)})`\n : `translate(${bandWidth / 2 + offsetHorizontal},\n ${(d.y1 <= baseLine)\n ? (0 - offsetVertical)\n : (0 + offsetVertical)})`;\n }\n }\n /**\n * Determines the value of the text-anchor CSS attribute\n * @param d - Data point\n * @param i - Index number\n * @param barOrientation - Orientation of the bar chart (horizontal/vertical)\n * @param baseLine - The base line of the chart\n */\n styleBarLabelTextAnchor(d, barOrientation, baseLine) {\n if (barOrientation === \"horizontal\") {\n return (d.y <= baseLine) ? \"start\" : \"end\";\n }\n else {\n return \"middle\";\n }\n }\n /**\n * Determines the value of the dominant-base-line CSS attribute\n * @param d - Data point\n * @param i - Index number\n * @param baseLine - The base line of the chart\n * @param barOrientation - Orientation of the bar chart (horizontal/vertical)\n */\n styleBarLabelDominantBaseline(d, baseLine, barOrientation) {\n if (barOrientation === \"horizontal\") {\n return \"central\";\n }\n else {\n return (d.y <= baseLine) ? \"text-after-edge\" : \"text-before-edge\";\n }\n }\n /**\n * Adds CSS styling to the bar labels\n */\n updateBarLabelsStyle() {\n const displayFormatStr = this.model.get(\"label_display_format\");\n const displayFormat = displayFormatStr\n ? d3.format(displayFormatStr)\n : null;\n let fonts = this.d3el.selectAll(\".bar_label\")\n .text((d, i) => displayFormat ? displayFormat(d.y) : null);\n const fontStyle = this.model.get(\"label_font_style\");\n for (const styleKey in fontStyle) {\n fonts = fonts.style(styleKey, fontStyle[styleKey]);\n }\n }\n ////////////////////////////\n ////// End bar labels //////\n ////////////////////////////\n update_type(model, value) {\n // We need to update domains here as the y_domain needs to be\n // changed when we switch from stacked to grouped.\n this.model.update_domains();\n this.draw();\n }\n update_colors() {\n //the following if condition is to handle the case of single\n //dimensional data.\n //if y is 1-d, each bar should be of 1 color.\n //if y is multi-dimensional, the corresponding values should be of\n //the same color.\n const that = this;\n const color_scale = this.scales.color;\n if (this.model.mark_data.length > 0) {\n if (!(this.model.is_y_2d)) {\n this.d3el.selectAll(\".bar\").style(\"fill\", function (d, i) {\n return (d.color !== undefined && color_scale !== undefined) ?\n color_scale.scale(d.color) : that.get_colors(d.color_index);\n });\n }\n else {\n this.d3el.selectAll(\".bargroup\")\n .selectAll(\".bar\")\n .style(\"fill\", function (d, i) {\n return (d.color !== undefined && color_scale !== undefined) ?\n color_scale.scale(d.color) : that.get_colors(d.color_index);\n });\n }\n }\n //legend color update\n if (this.legend_el) {\n this.legend_el.selectAll(\".legendrect\")\n .style(\"fill\", function (d, i) {\n return (d.color && color_scale) ?\n color_scale.scale(d.color) : that.get_colors(d.color_index);\n });\n this.legend_el.selectAll(\".legendtext\")\n .style(\"fill\", function (d, i) {\n return (d.color !== undefined && color_scale !== undefined) ?\n color_scale.scale(d.color) : that.get_colors(d.color_index);\n });\n }\n }\n draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) {\n if (!(this.model.is_y_2d) &&\n (this.model.get(\"colors\").length !== 1 &&\n this.model.get(\"color_mode\") !== \"element\")) {\n return [0, 0];\n }\n const legend_data = this.model.mark_data[0].values.map(function (data) {\n return {\n index: data.sub_index,\n color: data.color,\n color_index: data.color_index\n };\n });\n const color_scale = this.scales.color;\n this.legend_el = elem.selectAll(\".legend\" + this.uuid)\n .data(legend_data);\n const that = this;\n const rect_dim = inter_y_disp * 0.8;\n const legend = this.legend_el.enter()\n .append(\"g\")\n .attr(\"class\", \"legend\" + this.uuid)\n .attr(\"transform\", function (d, i) {\n return \"translate(0, \" + (i * inter_y_disp + y_disp) + \")\";\n })\n .on(\"mouseover\", _.bind(function () {\n this.event_dispatcher(\"legend_mouse_over\");\n }, this))\n .on(\"mouseout\", _.bind(function () {\n this.event_dispatcher(\"legend_mouse_out\");\n }, this))\n .on(\"click\", _.bind(function () {\n this.event_dispatcher(\"legend_clicked\");\n }, this));\n legend.append(\"rect\")\n .classed(\"legendrect\", true)\n .style(\"fill\", function (d, i) {\n return (d.color !== undefined && color_scale !== undefined) ?\n color_scale.scale(d.color) : that.get_colors(d.color_index);\n })\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", rect_dim)\n .attr(\"height\", rect_dim);\n legend.append(\"text\")\n .attr(\"class\", \"legendtext\")\n .attr(\"x\", rect_dim * 1.2)\n .attr(\"y\", rect_dim / 2)\n .attr(\"dy\", \"0.35em\")\n .text(function (d, i) { return that.model.get(\"labels\")[i]; })\n .style(\"fill\", function (d, i) {\n return (d.color !== undefined && color_scale !== undefined) ?\n color_scale.scale(d.color) : that.get_colors(d.color_index);\n });\n legend.merge(this.legend_el);\n const max_length = d3.max(this.model.get(\"labels\"), function (d) {\n return d.length;\n });\n this.legend_el.exit().remove();\n return [this.model.mark_data[0].values.length, max_length];\n }\n clear_style(style, indices) {\n if (!indices || indices.length === 0) {\n return;\n }\n if (Object.keys(style).length === 0) {\n return;\n }\n const elements = this.d3el.selectAll(\".bargroup\").filter((d, index) => {\n return indices.indexOf(index) !== -1;\n });\n const clearing_style = {};\n for (const key in style) {\n clearing_style[key] = null;\n }\n elements.selectAll(\".bar\").styles(clearing_style);\n }\n set_style_on_elements(style, indices) {\n if (!indices || indices.length === 0) {\n return;\n }\n if (Object.keys(style).length === 0) {\n return;\n }\n const elements = this.d3el.selectAll(\".bargroup\").filter((data, index) => {\n return indices.indexOf(index) !== -1;\n });\n elements.selectAll(\".bar\").styles(style);\n }\n set_default_style(indices) {\n // For all the elements with index in the list indices, the default\n // style is applied.\n if (!indices || indices.length === 0) {\n return;\n }\n const elements = this.d3el.selectAll(\".bargroup\").filter((data, index) => {\n return indices.indexOf(index) !== -1;\n });\n const fill = this.model.get(\"fill\"), stroke = this.model.get(\"stroke\"), stroke_width = this.model.get(\"stroke_width\");\n elements.selectAll('.bar')\n .style(\"fill\", fill ? this.get_mark_color.bind(this) : \"none\")\n .style(\"stroke\", stroke ? stroke : this.get_mark_color.bind(this))\n .style(\"opacity\", this.get_mark_opacity.bind(this))\n .style(\"stroke-width\", stroke_width);\n }\n set_x_range() {\n const dom_scale = this.dom_scale;\n if (dom_scale.model.type === \"ordinal\") {\n return dom_scale.scale.range();\n }\n else {\n return [dom_scale.scale(d3.min(this.x.domain())),\n dom_scale.scale(d3.max(this.x.domain()))];\n }\n }\n bar_click_handler(args) {\n const index = args.index;\n const that = this;\n const idx = this.model.get(\"selected\") || [];\n let selected = Array.from(idx);\n // index of bar i. Checking if it is already present in the list.\n const elem_index = selected.indexOf(index);\n // Replacement for \"Accel\" modifier.\n const accelKey = d3GetEvent().ctrlKey || d3GetEvent().metaKey;\n if (elem_index > -1 && accelKey) {\n // if the index is already selected and if accel key is\n // pressed, remove the element from the list\n selected.splice(elem_index, 1);\n }\n else {\n if (d3GetEvent().shiftKey) {\n //If shift is pressed and the element is already\n //selected, do not do anything\n if (elem_index > -1) {\n return;\n }\n //Add elements before or after the index of the current\n //bar which has been clicked\n const min_index = (selected.length !== 0) ?\n d3.min(selected) : -1;\n const max_index = (selected.length !== 0) ?\n d3.max(selected) : that.model.mark_data.length;\n if (index > max_index) {\n _.range(max_index + 1, index + 1).forEach(function (i) {\n selected.push(i);\n });\n }\n else if (index < min_index) {\n _.range(index, min_index).forEach(function (i) {\n selected.push(i);\n });\n }\n }\n else if (accelKey) {\n //If accel is pressed and the bar is not already selcted\n //add the bar to the list of selected bars.\n selected.push(index);\n }\n // updating the array containing the bar indexes selected\n // and updating the style\n else {\n //if accel is not pressed, then clear the selected ones\n //and set the current element to the selected\n selected = [];\n selected.push(index);\n }\n }\n this.model.set(\"selected\", ((selected.length === 0) ? null : new Uint32Array(selected)), { updated_view: this });\n this.touch();\n const e = d3GetEvent();\n if (e.cancelBubble !== undefined) { // IE\n e.cancelBubble = true;\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n e.preventDefault();\n }\n reset_selection() {\n this.model.set(\"selected\", null);\n this.selected_indices = null;\n this.touch();\n }\n compute_view_padding() {\n // //This function returns a dictionary with keys as the scales and\n // //value as the pixel padding required for the rendering of the\n // //mark.\n const dom_scale = this.dom_scale;\n const orient = this.model.get(\"orientation\");\n let x_padding = 0;\n const avail_space = (orient === \"vertical\") ? this.parent.plotarea_width : this.parent.plotarea_height;\n if (dom_scale) {\n if (this.x !== null && this.x !== undefined &&\n this.x.domain().length !== 0) {\n if (dom_scale.model.type !== \"ordinal\") {\n if (this.model.get(\"align\") === \"center\") {\n x_padding = (avail_space / (2.0 * this.x.domain().length) + 1);\n }\n else if (this.model.get(\"align\") === \"left\" ||\n this.model.get(\"align\") === \"right\") {\n x_padding = (avail_space / (this.x.domain().length) + 1);\n }\n }\n else {\n if (this.model.get(\"align\") === \"left\" ||\n this.model.get(\"align\") === \"right\") {\n x_padding = parseFloat((this.x.bandwidth() / 2).toFixed(2));\n }\n }\n }\n }\n if (orient === \"vertical\") {\n if (x_padding !== this.x_padding) {\n this.x_padding = x_padding;\n this.trigger(\"mark_padding_updated\");\n //dispatch the event\n }\n }\n else {\n if (x_padding !== this.y_padding) {\n this.y_padding = x_padding;\n this.trigger(\"mark_padding_updated\");\n //dispatch the event\n }\n }\n }\n}\nexports.Bars = Bars;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsOEJBQTRCO0FBQzVCLDRCQUE0QjtBQUM1QixzR0FBc0c7QUFDdEcsaUVBQWlFO0FBQ2pFLE1BQU0sVUFBVSxHQUFHLGNBQWMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVuRiw4Q0FBZ0M7QUFDaEMsaUNBQTZCO0FBRzdCLE1BQWEsSUFBSyxTQUFRLFdBQUk7SUFFMUIsTUFBTTtRQUNGLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxD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VyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO29CQUM1QixDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3BFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvRSxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsVUFBVSxDQUFDO2dCQUN0QyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RixPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbkUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst version_1 = require(\"./version\");\nclass HandDrawModel extends widgets.WidgetModel {\n defaults() {\n return Object.assign({}, widgets.WidgetModel.prototype.defaults(), { _model_name: \"HandDrawModel\", _view_name: \"HandDraw\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, lines: null, line_index: 0, min_x: null, max_x: null });\n }\n}\nHandDrawModel.serializers = Object.assign({}, widgets.DOMWidgetModel.serializers, { lines: { deserialize: widgets.unpack_models } });\nexports.HandDrawModel = HandDrawModel;\n;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFuZERyYXdNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9IYW5kRHJhd01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCwrREFBaUQ7QUFDakQsdUNBQXlDO0FBRXpDLE1BQWEsYUFBYyxTQUFRLE9BQU8sQ0FBQyxXQUFXO0lBRWxELFFBQVE7UUFDSix5QkFBVyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFDL0MsV0FBVyxFQUFFLGVBQWUsRUFDNUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLFFBQVEsRUFDdkIsWUFBWSxFQUFFLFFBQVEsRUFDdEIscUJBQXFCLEVBQUUsc0JBQVksRUFDbkMsb0JBQW9CLEVBQUUsc0JBQVksRUFFbEMsS0FBSyxFQUFFLElBQUksRUFDWCxVQUFVLEVBQUUsQ0FBQyxFQUNiLEtBQUssRUFBRSxJQUFJLEVBQ1gsS0FBSyxFQUFFLElBQUksSUFDYjtJQUNOLENBQUM7O0FBRU0seUJBQVcscUJBQ1gsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLElBQ3JDLEtBQUssRUFBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLElBQ2hEO0FBckJOLHNDQXNCQztBQUFBLENBQUMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-selection\"));\nconst _ = __importStar(require(\"underscore\"));\nconst Mark_1 = require(\"./Mark\");\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nclass OHLC extends Mark_1.Mark {\n render() {\n const base_creation_promise = super.render();\n this.selected_indices = this.model.get(\"selected\");\n this.selected_style = this.model.get(\"selected_style\");\n this.unselected_style = this.model.get(\"unselected_style\");\n this.display_el_classes = [\"stick_body\", \"stick_tail\", \"stick_head\"];\n const that = this;\n this.displayed.then(function () {\n that.parent.tooltip_div.node().appendChild(that.tooltip_div.node());\n that.create_tooltip();\n });\n return base_creation_promise.then(function () {\n that.event_listeners = {};\n that.process_interactions();\n that.create_listeners();\n that.draw();\n });\n }\n set_ranges() {\n const x_scale = this.scales.x;\n if (x_scale) {\n x_scale.set_range(this.parent.padded_range(\"x\", x_scale.model));\n }\n const y_scale = this.scales.y;\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n }\n }\n set_positional_scales() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n }\n /**\n * Creates event listeners and binds them to rendered d3 elements\n */\n create_listeners() {\n super.create_listeners.apply(this);\n this.d3el\n .on(\"mouseover\", _.bind(function () {\n this.event_dispatcher(\"mouse_over\");\n }, this))\n .on(\"mousemove\", _.bind(function () {\n this.event_dispatcher(\"mouse_move\");\n }, this))\n .on(\"mouseout\", _.bind(function () {\n this.event_dispatcher(\"mouse_out\");\n }, this));\n this.listenTo(this.model, \"change:tooltip\", this.create_tooltip);\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n this.listenTo(this.model, \"change:selected\", this.update_selected);\n this.listenTo(this.model, \"change:stroke\", this.update_stroke);\n this.listenTo(this.model, \"change:stroke_width\", this.update_stroke_width);\n this.listenTo(this.model, \"change:colors\", this.update_colors);\n this.listenTo(this.model, \"change:opacities\", this.update_opacities);\n this.listenTo(this.model, \"change:marker\", this.update_marker);\n this.listenTo(this.model, \"format_updated\", this.draw);\n this.listenTo(this.model, \"data_updated\", this.draw);\n this.listenTo(this.parent, \"bg_clicked\", function () {\n this.event_dispatcher(\"parent_clicked\");\n });\n }\n /**\n * Sets event listeners depending on the interaction typr\n * @param interaction - string representing the interaction\n */\n process_click(interaction) {\n super.process_click(interaction);\n if (interaction === \"select\") {\n this.event_listeners.parent_clicked = this.reset_selection;\n this.event_listeners.element_clicked = this.ohlc_click_handler;\n }\n }\n /**\n * Resets model state for selected indices\n */\n reset_selection() {\n this.model.set(\"selected\", null);\n this.selected_indices = null;\n this.touch();\n }\n /**\n * Updates model state with selected indices\n * @param model - model object\n * @param value - array of indices\n */\n update_selected(model, value) {\n this.selected_indices = value;\n this.apply_styles();\n }\n /**\n * Updates model state with selected indices (adapted from Bars.ts)\n * @param args - data object of {x, y, index}\n */\n ohlc_click_handler(args) {\n const index = args.index;\n const that = this;\n const idx = this.model.get(\"selected\") || [];\n let selected = Array.from(idx);\n // index of candle i. Checking if it is already present in the list.\n const elem_index = selected.indexOf(index);\n // Replacement for \"Accel\" modifier.\n const accelKey = d3GetEvent().ctrlKey || d3GetEvent().metaKey;\n if (elem_index > -1 && accelKey) {\n // if the index is already selected and if accel key is\n // pressed, remove the element from the list\n selected.splice(elem_index, 1);\n }\n else {\n if (d3GetEvent().shiftKey) {\n //If shift is pressed and the element is already\n //selected, do not do anything\n if (elem_index > -1) {\n return;\n }\n //Add elements before or after the index of the current\n //candle which has been clicked\n const min_index = (selected.length !== 0) ?\n d3.min(selected) : -1;\n const max_index = (selected.length !== 0) ?\n d3.max(selected) : that.model.mark_data.length;\n if (index > max_index) {\n _.range(max_index + 1, index + 1).forEach(function (i) {\n selected.push(i);\n });\n }\n else if (index < min_index) {\n _.range(index, min_index).forEach(function (i) {\n selected.push(i);\n });\n }\n }\n else if (accelKey) {\n //If accel is pressed and the candle is not already selcted\n //add the candle to the list of selected candles.\n selected.push(index);\n }\n // updating the array containing the candle indexes selected\n // and updating the style\n else {\n //if accel is not pressed, then clear the selected ones\n //and set the current element to the selected\n selected = [];\n selected.push(index);\n }\n }\n this.model.set(\"selected\", ((selected.length === 0) ? null : selected), { updated_view: this });\n this.touch();\n const e = d3GetEvent();\n if (e.cancelBubble !== undefined) { // IE\n e.cancelBubble = true;\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n e.preventDefault();\n }\n update_stroke() {\n const stroke = this.model.get(\"stroke\");\n this.d3el.selectAll(\".stick\").style(\"stroke\", stroke);\n if (this.legend_el) {\n this.legend_el.selectAll(\"path\").style(\"stroke\", stroke);\n this.legend_el.selectAll(\"text\").style(\"fill\", stroke);\n }\n }\n update_stroke_width() {\n const stroke_width = this.model.get(\"stroke_width\");\n this.d3el.selectAll(\".stick\").attr(\"stroke-width\", stroke_width);\n }\n update_colors() {\n const that = this;\n const colors = this.model.get(\"colors\");\n const up_color = (colors[0] ? colors[0] : \"none\");\n const down_color = (colors[1] ? colors[1] : \"none\");\n // Fill candles based on the opening and closing values\n this.d3el.selectAll(\".stick\").style(\"fill\", function (d) {\n return (d.y[that.model.px.o] > d.y[that.model.px.c] ?\n down_color : up_color);\n });\n if (this.legend_el) {\n this.legend_el.selectAll(\"path\").style(\"fill\", up_color);\n }\n }\n update_opacities() {\n const opacities = this.model.get(\"opacities\");\n this.d3el.selectAll(\".stick\").style(\"opacity\", function (d, i) {\n return opacities[i];\n });\n if (this.legend_el) {\n this.legend_el.selectAll(\"path\")\n .attr(\"opacity\", function (d, i) { return opacities[i]; });\n }\n }\n update_marker() {\n const marker = this.model.get(\"marker\");\n if (this.legend_el && this.rect_dim) {\n this.draw_legend_icon(this.rect_dim, this.legend_el);\n }\n // Redraw existing marks\n this.draw_mark_paths(marker, this.d3el, this.model.mark_data.map(function (d, index) {\n return d[1];\n }));\n }\n update_selected_colors(idx_start, idx_end) {\n let current_range = _.range(idx_start, idx_end + 1);\n if (current_range.length == this.model.mark_data.length) {\n current_range = [];\n }\n const that = this;\n const stroke = this.model.get(\"stroke\");\n const colors = this.model.get(\"colors\");\n const up_color = (colors[0] ? colors[0] : stroke);\n const down_color = (colors[1] ? colors[1] : stroke);\n const px = this.model.px;\n _.range(0, this.model.mark_data.length)\n .forEach(function (d) {\n that.d3el.selectAll(\"#stick\" + d)\n .style(\"stroke\", stroke);\n });\n current_range.forEach(function (d) {\n that.d3el.selectAll(\"#stick\" + d)\n .style(\"stroke\", function (d) {\n return d[px.o] > d[px.c] ? down_color : up_color;\n });\n });\n }\n invert_range(start_pxl, end_pxl) {\n if (start_pxl === undefined || end_pxl === undefined ||\n this.model.mark_data.length === 0) {\n this.update_selected_colors(-1, -1);\n const selected = [];\n return selected;\n }\n const indices = new Uint32Array(_.range(this.model.mark_data.length));\n const that = this;\n const selected = indices.filter(index => {\n const elem = that.x_pixels[index];\n return (elem >= start_pxl && elem <= end_pxl);\n });\n const x_scale = this.scales.x;\n let idx_start = -1;\n let idx_end = -1;\n if (selected.length > 0 &&\n (start_pxl !== x_scale.scale.range()[0] ||\n end_pxl !== x_scale.scale.range()[1])) {\n idx_start = selected[0];\n idx_end = selected[selected.length - 1];\n }\n this.update_selected_colors(idx_start, idx_end);\n this.model.set(\"selected\", selected);\n this.touch();\n return super.invert_range(start_pxl, end_pxl);\n }\n invert_point(pixel) {\n const abs_diff = this.x_pixels.map(function (elem) { return Math.abs(elem - pixel); });\n const sel_index = abs_diff.indexOf(d3.min(abs_diff));\n this.update_selected_colors(sel_index, sel_index);\n this.model.set(\"selected\", [sel_index]);\n this.touch();\n return;\n }\n draw() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.set_ranges();\n const colors = this.model.get(\"colors\");\n const opacities = this.model.get(\"opacities\");\n const up_color = (colors[0] ? colors[0] : \"none\");\n const down_color = (colors[1] ? colors[1] : \"none\");\n const px = this.model.px;\n const stick = this.d3el.selectAll(\".stick\")\n .data(this.model.mark_data.map(function (data, index) {\n return {\n x: data[0],\n y: data[1],\n index: index\n };\n }));\n // Create new\n const new_sticks = stick.enter()\n .append(\"g\")\n .attr(\"class\", \"stick\")\n .attr(\"id\", function (d, i) { return \"stick\" + i; })\n .style(\"stroke\", this.model.get(\"stroke\"))\n .style(\"opacity\", function (d, i) {\n return opacities[i];\n });\n new_sticks.append(\"path\").attr(\"class\", \"stick_head\");\n new_sticks.append(\"path\").attr(\"class\", \"stick_tail\");\n new_sticks.append(\"path\").attr(\"class\", \"stick_body\");\n stick.exit().remove();\n const that = this;\n // Determine offset to use for translation\n let y_index = px.h;\n if (px.h === -1) {\n y_index = px.o;\n }\n // Update all of the marks\n this.d3el.selectAll(\".stick\")\n .style(\"fill\", function (d, i) {\n return (d.y[px.o] > d.y[px.c]) ? down_color : up_color;\n })\n .attr(\"stroke-width\", this.model.get(\"stroke_width\"));\n if (x_scale.model.type === \"ordinal\") {\n // If we are out of range, we just set the mark in the final\n // bucket's range band. FIXME?\n const x_max = d3.max(this.parent.range(\"x\"));\n this.d3el.selectAll(\".stick\").attr(\"transform\", function (d, i) {\n return \"translate(\" + ((x_scale.scale(that.model.mark_data[i][0]) !== undefined ?\n x_scale.scale(that.model.mark_data[i][0]) : x_max) +\n x_scale.scale.bandwidth() / 2) + \",\" +\n (y_scale.scale(d.y[y_index]) + y_scale.offset) + \")\";\n });\n }\n else {\n this.d3el.selectAll(\".stick\").attr(\"transform\", function (d, i) {\n return \"translate(\" + (x_scale.scale(that.model.mark_data[i][0]) +\n x_scale.offset) + \",\" +\n (y_scale.scale(d.y[y_index]) +\n y_scale.offset) + \")\";\n });\n }\n this.d3el.selectAll(\".stick\").on(\"click\", (d, i) => {\n return that.event_dispatcher(\"element_clicked\", { \"data\": d, \"index\": i });\n });\n // Draw the mark paths\n this.draw_mark_paths(this.model.get(\"marker\"), this.d3el, this.model.mark_data.map(function (d) {\n return d[1];\n }));\n this.x_pixels = this.model.mark_data.map(function (el) {\n return x_scale.scale(el[0]) + x_scale.offset;\n });\n }\n draw_mark_paths(type, selector, dat) {\n /* Calculate some values so that we can draw the marks\n * | <----- high (0,0)\n * |\n * --------- <- headline_top (open or close)\n * | |\n * | |\n * | |\n * --------- <- headline_bottom (open or close)\n * |\n * | <----- low\n *\n *\n * | <----- high (0,0)\n * ____| <----- open\n * |\n * |\n * |\n * |____ <- close\n * | <----- low\n */\n const px = this.model.px;\n const that = this;\n const open = [];\n const high = [];\n const low = [];\n const close = [];\n const headline_top = [];\n const headline_bottom = [];\n const to_left_side = [];\n const scaled_mark_widths = [];\n let min_x_difference = this.calculate_mark_width();\n const x_scale = this.scales.x;\n const y_scale = this.scales.y;\n let offset_in_x_units;\n let data_point;\n for (var i = 0; i < dat.length; i++) {\n if (px.o === -1) {\n open[i] = undefined;\n }\n else {\n open[i] = y_scale.scale(dat[i][px.o]);\n }\n if (px.c === -1) {\n close[i] = undefined;\n }\n else {\n close[i] = y_scale.scale(dat[i][px.c]);\n }\n // We can only compute these (and only need to compute these)\n // when we have both the open and the close values\n if (px.o !== -1 && px.c !== -1) {\n headline_top[i] = (dat[i][px.o] > dat[i][px.c]) ?\n open[i] : close[i];\n headline_bottom[i] = (dat[i][px.o] < dat[i][px.c]) ?\n open[i] : close[i];\n }\n // We never have high without low and vice versa, so we can\n // check everything at once\n if (px.h === -1 || px.l === -1) {\n high[i] = open[i];\n low[i] = close[i];\n }\n else {\n high[i] = y_scale.scale(dat[i][px.h]);\n low[i] = y_scale.scale(dat[i][px.l]);\n }\n data_point = that.model.mark_data[i][0];\n // Check for dates so that we don't concatenate\n if (min_x_difference instanceof Date) {\n min_x_difference = min_x_difference.getTime();\n }\n if (data_point instanceof Date) {\n data_point = data_point.getTime();\n }\n offset_in_x_units = data_point + min_x_difference;\n if (x_scale.model.type === \"ordinal\") {\n scaled_mark_widths[i] = x_scale.scale.bandwidth() * 0.75;\n }\n else {\n scaled_mark_widths[i] = (x_scale.scale(offset_in_x_units) -\n x_scale.scale(data_point)) *\n 0.75;\n }\n to_left_side[i] = -1 * scaled_mark_widths[i] / 2;\n }\n // Determine OHLC marker type\n // Note: if we do not have open or close data then we have to draw\n // a bar.\n if (type == \"candle\" && px.o !== -1 && px.c !== -1) {\n /*\n * | <-------- head\n * ---------\n * | |\n * | | <---- body\n * | |\n * ---------\n * | <-------- tail\n */\n if (px.h !== -1 || px.l !== -1) {\n selector.selectAll(\".stick_head\")\n .attr(\"d\", function (d, i) {\n return that.head_path_candle(headline_top[i] - high[i]);\n });\n selector.selectAll(\".stick_tail\")\n .attr(\"d\", function (d, i) {\n return that.tail_path_candle(headline_bottom[i] - high[i], low[i] - headline_bottom[i]);\n });\n }\n else {\n selector.selectAll(\".stick_head\").attr(\"d\", \"\");\n selector.selectAll(\".stick_tail\").attr(\"d\", \"\");\n }\n selector.selectAll(\".stick_body\")\n .attr(\"d\", function (d, i) {\n return that.body_path_candle(to_left_side[i], open[i] - high[i], scaled_mark_widths[i], close[i] - open[i]);\n });\n }\n else {\n // bar\n /*\n * |\n * ____| <-------- head (horizontal piece)\n * |\n * | <-------- body (vertical piece)\n * |\n * |____ <---- tail (horizontal piece)\n * |\n */\n if (px.o !== -1) {\n selector.selectAll(\".stick_head\")\n .attr(\"d\", function (d, i) {\n return that.head_path_bar(to_left_side[i], open[i] - high[i], to_left_side[i] * -1);\n });\n }\n else {\n selector.selectAll(\".stick_head\").attr(\"d\", \"\");\n }\n if (px.c !== -1) {\n selector.selectAll(\".stick_tail\")\n .attr(\"d\", function (d, i) {\n return that.tail_path_bar(close[i] - high[i], to_left_side[i] * -1);\n });\n }\n else {\n selector.selectAll(\".stick_tail\").attr(\"d\", \"\");\n }\n selector.selectAll(\".stick_body\")\n .attr(\"d\", function (d, i) {\n return that.body_path_bar(low[i] - high[i]);\n });\n }\n }\n /* SVG path for head of candle */\n head_path_candle(height) {\n return \"m0,0 l0,\" + height;\n }\n /* SVG path for tail of candle */\n tail_path_candle(y_offset, height) {\n return \"m0,\" + y_offset + \" l0,\" + height;\n }\n /* SVG path for body of candle */\n body_path_candle(x_offset, y_offset, width, height) {\n return \"m\" + x_offset + \",\" + y_offset + \" l\" + width + \",0\" +\n \" l0,\" + height + \" l\" + (-1 * width) + \",0\" + \" z\";\n }\n /* SVG path for head of bar */\n head_path_bar(x_offset, y_offset, width) {\n return \"m\" + x_offset + \",\" + y_offset +\n \" l\" + width + \",0\";\n }\n /* SVG path for tail of bar */\n tail_path_bar(y_offset, width) {\n return \"m0,\" + y_offset +\n \" l\" + width + \",0\";\n }\n /* SVG path for body of bar */\n body_path_bar(height) {\n return \"m0,0 l0,\" + height;\n }\n calculate_mark_width() {\n /*\n * Calculate the mark width for this data set based on the minimum\n * distance between consecutive points.\n */\n const that = this;\n let min_distance = Number.POSITIVE_INFINITY;\n const scales = this.model.get(\"scales\");\n const x_scale = scales.x;\n for (var i = 1; i < that.model.mark_data.length; i++) {\n const dist = that.model.mark_data[i][0] -\n that.model.mark_data[i - 1][0];\n if (dist < min_distance)\n min_distance = dist;\n }\n // Check if there are less than two data points\n if (min_distance === Number.POSITIVE_INFINITY) {\n min_distance = (x_scale.domain[1] -\n x_scale.domain[0]) / 2;\n }\n if (min_distance < 0) {\n min_distance = -1 * min_distance;\n }\n return min_distance;\n }\n relayout() {\n super.relayout();\n this.set_ranges();\n this.d3el.select(\".intselmouse\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height);\n // We have to redraw every time that we relayout\n this.draw();\n }\n draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) {\n const stroke = this.model.get(\"stroke\");\n const colors = this.model.get(\"colors\");\n const up_color = (colors[0] ? colors[0] : \"none\");\n this.rect_dim = inter_y_disp * 0.8;\n const that = this;\n this.legend_el = elem.selectAll(\"#legend\" + this.uuid)\n .data([this.model.mark_data]);\n const leg = this.legend_el.enter().append(\"g\")\n .attr(\"transform\", function (d, i) {\n return \"translate(0, \" + (i * inter_y_disp + y_disp) + \")\";\n })\n .attr(\"class\", \"legend\")\n .attr(\"id\", \"legend\" + this.uuid)\n .style(\"fill\", up_color)\n .on(\"mouseover\", _.bind(this.highlight_axes, this))\n .on(\"mouseout\", _.bind(this.unhighlight_axes, this));\n leg.append(\"path\").attr(\"class\", \"stick_head stick\");\n leg.append(\"path\").attr(\"class\", \"stick_tail stick\");\n leg.append(\"path\").attr(\"class\", \"stick_body stick\")\n .style(\"fill\", up_color);\n // Add stroke color and set position\n leg.selectAll(\"path\")\n .style(\"stroke\", stroke)\n .attr(\"transform\", \"translate(\" + (that.rect_dim / 2) + \",0)\");\n // Draw icon and text\n this.draw_legend_icon(that.rect_dim, leg);\n this.legend_el.append(\"text\")\n .attr(\"class\", \"legendtext sticktext\")\n .attr(\"x\", that.rect_dim * 1.2)\n .attr(\"y\", that.rect_dim / 2)\n .attr(\"dy\", \"0.35em\")\n .text(function (d, i) { return that.model.get(\"labels\")[i]; })\n .style(\"fill\", stroke);\n const max_length = d3.max(this.model.get(\"labels\"), function (d) {\n return Number(d.length);\n });\n this.legend_el.exit().remove();\n return [1, max_length];\n }\n draw_legend_icon(size, selector) {\n /*\n * Draw OHLC icon next to legend text\n * Drawing the icon like this means we can avoid scaling when we\n * already know what the size of the mark is in pixels\n */\n const height = size;\n const width = size / 2;\n const bottom_y_offset = size * 3 / 4;\n const top_y_offset = size / 4;\n if (this.model.get(\"marker\") === \"candle\") {\n selector.selectAll(\".stick_head\").attr(\"d\", this.head_path_candle(width / 2));\n selector.selectAll(\".stick_tail\").attr(\"d\", this.tail_path_candle(bottom_y_offset, width / 2));\n selector.selectAll(\".stick_body\").attr(\"d\", this.body_path_candle(width * -1 / 2, top_y_offset, width, height / 2));\n }\n else { // bar\n selector.selectAll(\".stick_head\").attr(\"d\", this.head_path_bar(width * -1 / 2, bottom_y_offset, width / 2));\n selector.selectAll(\".stick_tail\").attr(\"d\", this.tail_path_bar(top_y_offset, width / 2));\n selector.selectAll(\".stick_body\").attr(\"d\", this.body_path_bar(height));\n }\n }\n clear_style() { }\n compute_view_padding() { }\n set_default_style() { }\n set_style_on_elements() { }\n}\nexports.OHLC = OHLC;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT0hMQy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9PSExDLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsMkVBQTJFO0FBQzNFLDhDQUFnQztBQUNoQyxpQ0FBOEI7QUFFOUIsTUFBTSxVQUFVLEdBQUcsY0FBVyxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUEsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRS9FLE1BQWEsSUFBSyxTQUFRLFdBQUk7SUFFMUIsTUFBTTtRQUNGLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVyRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLHFCQUFxQixDQUFD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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// import * as d3 from 'd3';\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-scale\"), require(\"d3-scale-chromatic\"));\nconst _ = __importStar(require(\"underscore\"));\nconst markmodel = __importStar(require(\"./MarkModel\"));\nconst serialize = __importStar(require(\"./serialize\"));\nclass BarsModel extends markmodel.MarkModel {\n defaults() {\n return Object.assign({}, markmodel.MarkModel.prototype.defaults(), { _model_name: \"BarsModel\", _view_name: \"Bars\", x: [], y: [], color: null, scales_metadata: {\n x: { orientation: \"horizontal\", dimension: \"x\" },\n y: { orientation: \"vertical\", dimension: \"y\" },\n color: { dimension: \"color\" }\n }, color_mode: \"auto\", type: \"stacked\", colors: ['steelblue'], padding: 0.05, fill: true, stroke: null, stroke_width: 1., base: 0.0, opacities: [], orientation: \"vertical\", align: \"center\", label_display: false, label_display_format: \".2f\", label_display_font_style: {}, label_display_horizontal_offset: 0.0, label_display_vertical_offset: 0.0 });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.is_y_2d = false;\n this.on_some_change([\"x\", \"y\", \"base\"], this.update_data, this);\n this.on(\"change:color\", function () {\n this.update_color();\n this.trigger(\"colors_updated\");\n }, this);\n // FIXME: replace this with on(\"change:preserve_domain\"). It is not done here because\n // on_some_change depends on the GLOBAL backbone on(\"change\") handler which\n // is called AFTER the specific handlers on(\"change:foobar\") and we make that\n // assumption.\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.update_data();\n this.update_color();\n this.update_domains();\n }\n update_data() {\n let x_data = this.get(\"x\");\n let y_data = this.get(\"y\");\n y_data = (y_data.length === 0 || !_.isNumber(y_data[0])) ?\n y_data : [y_data];\n const that = this;\n this.base_value = this.get(\"base\");\n if (this.base_value === undefined || this.base_value === null) {\n this.base_value = 0;\n }\n if (x_data.length === 0 || y_data.length === 0) {\n this.mark_data = [];\n this.is_y_2d = false;\n }\n else {\n x_data = x_data.slice(0, d3.min(y_data.map(function (d) {\n return d.length;\n })));\n // since x_data may be a TypedArray, explicitly use Array.map\n this.mark_data = Array.prototype.map.call(x_data, function (x_elem, index) {\n const data = {};\n let y0 = that.base_value;\n let y0_neg = that.base_value;\n let y0_left = that.base_value;\n data.key = x_elem;\n // since y_data may be a TypedArray, explicitly use Array.map\n data.values = Array.prototype.map.call(y_data, function (y_elem, y_index) {\n const value = y_elem[index] - that.base_value;\n const positive = (value >= 0);\n return {\n index: index,\n sub_index: y_index,\n x: x_elem,\n // In the following code, the values y0, y1 are\n // only relevant for a stacked bar chart. grouped\n // bars only deal with base_value and y.\n // y0 is the value on the y scale for the upper end\n // of the bar.\n y0: (positive) ? y0 : (function () {\n y0_left += value;\n return y0_left;\n }()),\n // y1 is the value on the y scale for the lower end\n // of the bar.\n y1: (positive) ? (y0 += value) : (function () {\n y0_neg += value;\n return (y0_neg - value);\n }()),\n // y_ref is the value on the y scale which represents\n // the height of the bar\n y_ref: value,\n y: y_elem[index],\n };\n });\n // pos_max is the maximum positive value for a group of\n // bars.\n data.pos_max = y0;\n // neg_max is the minimum negative value for a group of\n // bars.\n data.neg_max = y0_neg;\n return data;\n });\n this.is_y_2d = (this.mark_data[0].values.length > 1);\n this.update_color();\n }\n this.update_domains();\n this.trigger(\"data_updated\");\n }\n get_data_dict(data, index) {\n return data;\n }\n update_color() {\n //Function to update the color attribute for the data. In scatter,\n //this is taken care of by the update_data itself. This is separate\n //in bars because update data does a lot more complex calculations\n //which should be avoided when possible\n if (!this.mark_data) {\n return;\n }\n const color = this.get(\"color\") || [];\n const color_scale = this.get(\"scales\").color;\n const color_mode = this.get(\"color_mode\");\n const apply_color_to_groups = ((color_mode === \"group\") ||\n (color_mode === \"auto\" && !(this.is_y_2d)));\n this.mark_data.forEach(function (single_bar_d, bar_grp_index) {\n single_bar_d.values.forEach(function (bar_d, bar_index) {\n bar_d.color_index = (apply_color_to_groups) ? bar_grp_index : bar_index;\n bar_d.color = color[bar_d.color_index];\n });\n });\n if (color_scale && color.length > 0) {\n if (!this.get(\"preserve_domain\").color) {\n color_scale.compute_and_set_domain(color, this.model_id + \"_color\");\n }\n else {\n color_scale.del_domain([], this.model_id + \"_color\");\n }\n }\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n const scales = this.get(\"scales\");\n const dom_scale = scales.x;\n const range_scale = scales.y;\n if (!this.get(\"preserve_domain\").x) {\n dom_scale.compute_and_set_domain(this.mark_data.map(function (elem) {\n return elem.key;\n }), this.model_id + \"_x\");\n }\n else {\n dom_scale.del_domain([], this.model_id + \"_x\");\n }\n if (!this.get(\"preserve_domain\").y) {\n if (this.get(\"type\") === \"stacked\") {\n range_scale.compute_and_set_domain([d3.min(this.mark_data, function (c) { return c.neg_max; }),\n d3.max(this.mark_data, function (c) { return c.pos_max; }), this.base_value], this.model_id + \"_y\");\n }\n else {\n const min = d3.min(this.mark_data, function (c) {\n return d3.min(c.values, function (val) {\n return val.y_ref;\n });\n });\n const max = d3.max(this.mark_data, function (c) {\n return d3.max(c.values, function (val) {\n return val.y_ref;\n });\n });\n range_scale.compute_and_set_domain([min, max, this.base_value], this.model_id + \"_y\");\n }\n }\n else {\n range_scale.del_domain([], this.model_id + \"_y\");\n }\n }\n}\nBarsModel.serializers = Object.assign({}, markmodel.MarkModel.serializers, { x: serialize.array_or_json, y: serialize.array_or_json, color: serialize.array_or_json });\nexports.BarsModel = BarsModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFyc01vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0JhcnNNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLDRCQUE0QjtBQUM1QixzR0FBc0c7QUFDdEcsOENBQWdDO0FBQ2hDLHVEQUF5QztBQUN6Qyx1REFBeUM7QUFFekMsTUFBYSxTQUFVLFNBQVEsU0FBUyxDQUFDLFNBQVM7SUFFOUMsUUFBUTtRQUNKLHlCQUFXLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUMvQyxXQUFXLEVBQUUsV0FBVyxFQUN4QixVQUFVLEVBQUUsTUFBTSxFQUNsQixDQUFDLEVBQUUsRUFBRSxFQUNMLENBQUMsRUFBRSxFQUFFLEVBQ0wsS0FBSyxFQUFFLElBQUksRUFDWCxlQUFlLEVBQUU7Z0JBQ2IsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNoRCxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQzlDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7YUFDaEMsRUFDRCxVQUFVLEVBQUUsTUFBTSxFQUNsQixJQUFJLEVBQUUsU0FBUyxFQUNmLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUNyQixPQUFPLEVBQUUsSUFBSSxFQUNiLElBQUksRUFBRSxJQUFJLEVBQ1YsTUFBTSxFQUFFLElBQUksRUFDWixZQUFZLEVBQUUsRUFBRSxFQUNoQixJQUFJLEVBQUUsR0FBRyxFQUNULFNBQVMsRUFBRSxFQUFFLEVBQ2IsV0FBVyxFQUFFLFVBQVUsRUFDdkIsS0FBSyxFQUFFLFFBQVEsRUFDZixhQUFhLEVBQUUsS0FBSyxFQUNwQixvQkFBb0IsRUFBRSxLQUFLLEVBQzNCLHdCQUF3QixFQUFFLEVB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _ = __importStar(require(\"underscore\"));\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-selection\"));\n// Hack to fix problem with webpack providing multiple d3 objects\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst utils = __importStar(require(\"./utils\"));\nconst Mark_1 = require(\"./Mark\");\nclass Hist extends Mark_1.Mark {\n render() {\n const base_creation_promise = super.render();\n this.selected_indices = this.calc_bar_indices_from_data_idx(this.model.get(\"selected\"));\n this.selected_style = this.model.get(\"selected_style\");\n this.unselected_style = this.model.get(\"unselected_style\");\n this.display_el_classes = [\"rect\", \"legendtext\"];\n const that = this;\n this.displayed.then(function () {\n that.parent.tooltip_div.node().appendChild(that.tooltip_div.node());\n that.create_tooltip();\n });\n return base_creation_promise.then(function () {\n that.event_listeners = {};\n that.process_interactions();\n that.create_listeners();\n that.draw();\n that.update_selected(that.model, that.model.get(\"selected\"));\n });\n }\n set_ranges() {\n const x_scale = this.scales.sample;\n if (x_scale) {\n x_scale.set_range(this.parent.padded_range(\"x\", x_scale.model));\n }\n const y_scale = this.scales.count;\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n }\n }\n set_positional_scales() {\n // In the case of Hist, a change in the \"sample\" scale triggers\n // a full \"update_data\" instead of a simple redraw.\n const x_scale = this.scales.sample, y_scale = this.scales.count;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.model.update_data();\n }\n });\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n }\n create_listeners() {\n super.create_listeners();\n this.d3el.on(\"mouseover\", _.bind(function () { this.event_dispatcher(\"mouse_over\"); }, this))\n .on(\"mousemove\", _.bind(function () { this.event_dispatcher(\"mouse_move\"); }, this))\n .on(\"mouseout\", _.bind(function () { this.event_dispatcher(\"mouse_out\"); }, this));\n this.listenTo(this.model, \"change:tooltip\", this.create_tooltip);\n this.listenTo(this.model, \"data_updated\", this.draw);\n this.listenTo(this.model, \"change:colors\", this.update_colors);\n this.model.on_some_change([\"stroke\", \"opacities\"], this.update_stroke_and_opacities, this);\n this.listenTo(this.model, \"change:selected\", this.update_selected);\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n this.listenTo(this.parent, \"bg_clicked\", function () {\n this.event_dispatcher(\"parent_clicked\");\n });\n }\n process_click(interaction) {\n super.process_click(interaction);\n if (interaction === \"select\") {\n this.event_listeners.parent_clicked = this.reset_selection;\n this.event_listeners.element_clicked = this.bar_click_handler;\n }\n }\n update_colors() {\n this.d3el.selectAll(\".bargroup\").selectAll(\"rect\")\n .style(\"fill\", (d, i) => {\n return this.get_colors(d.index);\n });\n if (this.model.get(\"labels\")) {\n this.d3el.selectAll(\".bargroup\").selectAll(\"text\")\n .style(\"fill\", (d, i) => {\n return this.get_colors(i);\n });\n }\n if (this.legend_el) {\n this.legend_el.selectAll(\"rect\")\n .style(\"fill\", (d, i) => {\n return this.get_colors(i);\n });\n this.legend_el.selectAll(\"text\")\n .style(\"fill\", (d, i) => {\n return this.get_colors(i);\n });\n }\n }\n update_stroke_and_opacities() {\n const stroke = this.model.get(\"stroke\");\n const opacities = this.model.get(\"opacities\");\n this.d3el.selectAll(\".rect\")\n .style(\"stroke\", stroke)\n .style(\"opacity\", function (d, i) {\n return opacities[i];\n });\n }\n calculate_bar_width() {\n const x_scale = this.scales.sample;\n let bar_width = (x_scale.scale(this.model.max_x) -\n x_scale.scale(this.model.min_x)) / this.model.num_bins;\n if (bar_width >= 10) {\n bar_width -= 2;\n }\n return bar_width;\n }\n relayout() {\n this.set_ranges();\n const x_scale = this.scales.sample, y_scale = this.scales.count;\n this.d3el.selectAll(\".bargroup\")\n .attr(\"transform\", function (d) {\n return \"translate(\" + x_scale.scale(d.x0) +\n \",\" + y_scale.scale(d.y) + \")\";\n });\n const bar_width = this.calculate_bar_width();\n this.d3el.selectAll(\".bargroup\").select(\"rect\")\n .transition(\"relayout\")\n .duration(this.parent.model.get(\"animation_duration\"))\n .attr(\"x\", 2)\n .attr(\"width\", bar_width)\n .attr(\"height\", function (d) {\n return y_scale.scale(0) - y_scale.scale(d.y);\n });\n }\n draw() {\n this.set_ranges();\n const indices = [];\n this.model.mark_data.forEach(function (d, i) {\n indices.push(i);\n });\n const x_scale = this.scales.sample, y_scale = this.scales.count;\n const that = this;\n const bar_width = this.calculate_bar_width();\n let bar_groups = this.d3el.selectAll(\".bargroup\")\n .data(this.model.mark_data);\n bar_groups.exit().remove();\n const bars_added = bar_groups.enter()\n .append(\"g\")\n .attr(\"class\", \"bargroup\");\n // initial values for width and height are set for animation\n bars_added.append(\"rect\")\n .attr(\"class\", \"rect\")\n .attr(\"x\", 2)\n .attr(\"width\", 0)\n .attr(\"height\", 0);\n bar_groups = bars_added.merge(bar_groups);\n bar_groups.attr(\"transform\", function (d) {\n return \"translate(\" + x_scale.scale(d.x0) + \",\" +\n y_scale.scale(d.y) + \")\";\n });\n bar_groups.select(\".rect\")\n .style(\"fill\", (d, i) => {\n return this.get_colors(d.index);\n })\n .on(\"click\", function (d, i) {\n return that.event_dispatcher(\"element_clicked\", {\n \"data\": d, \"index\": i\n });\n })\n .attr(\"id\", function (d, i) { return \"rect\" + i; })\n .transition(\"draw\")\n .duration(this.parent.model.get(\"animation_duration\"))\n .attr(\"width\", bar_width)\n .attr(\"height\", function (d) {\n return y_scale.scale(0) - y_scale.scale(d.y);\n });\n //bin_pixels contains the pixel values of the start points of each\n //of the bins and the end point of the last bin.\n this.bin_pixels = this.model.x_bins.map(function (el) {\n return x_scale.scale(el) + x_scale.offset;\n });\n // pixel coords contains the [x0, x1] and [y0, y1] of each bin\n this.pixel_coords = this.model.mark_data.map(function (d) {\n const x = x_scale.scale(d.x0);\n return [[x, x + bar_width], [0, d.y].map(y_scale.scale)];\n });\n this.update_stroke_and_opacities();\n }\n bar_click_handler(args) {\n const index = args.index;\n //code repeated from bars. We should unify the two.\n const that = this;\n const idx = this.selected_indices;\n let selected = idx ? utils.deepCopy(idx) : [];\n // index of bar i. Checking if it is already present in the list.\n const elem_index = selected.indexOf(index);\n // Replacement for \"Accel\" modifier.\n const accelKey = d3GetEvent().ctrlKey || d3GetEvent().metaKey;\n if (elem_index > -1 && accelKey) {\n // if the index is already selected and if accel key is\n // pressed, remove the element from the list\n selected.splice(elem_index, 1);\n }\n else {\n if (d3GetEvent().shiftKey) {\n //If shift is pressed and the element is already\n //selected, do not do anything\n if (elem_index > -1) {\n return;\n }\n //Add elements before or after the index of the current\n //bar which has been clicked\n const min_index = (selected.length !== 0) ?\n d3.min(selected) : -1;\n const max_index = (selected.length !== 0) ?\n d3.max(selected) : that.model.mark_data.length;\n if (index > max_index) {\n _.range(max_index + 1, index + 1).forEach(function (i) {\n selected.push(i);\n });\n }\n else if (index < min_index) {\n _.range(index, min_index).forEach(function (i) {\n selected.push(i);\n });\n }\n }\n else if (accelKey) {\n //If accel is pressed and the bar is not already selcted\n //add the bar to the list of selected bars.\n selected.push(index);\n }\n // updating the array containing the bar indexes selected\n // and updating the style\n else {\n //if accel is not pressed, then clear the selected ones\n //and set the current element to the selected\n selected = [];\n selected.push(index);\n }\n }\n this.selected_indices = selected;\n this.model.set(\"selected\", ((selected.length === 0) ? null :\n this.calc_data_indices(selected)), { updated_view: this });\n this.touch();\n let e = d3GetEvent();\n if (e.cancelBubble !== undefined) { // IE\n e.cancelBubble = true;\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n e.preventDefault();\n }\n draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) {\n this.legend_el = elem.selectAll(\".legend\" + this.uuid)\n .data([this.model.mark_data[0]]);\n const that = this;\n const rect_dim = inter_y_disp * 0.8;\n const new_legend = this.legend_el.enter()\n .append(\"g\")\n .attr(\"class\", \"legend\" + this.uuid)\n .attr(\"transform\", function (d, i) {\n return \"translate(0, \" + (i * inter_y_disp + y_disp) + \")\";\n })\n .on(\"mouseover\", _.bind(function () {\n this.event_dispatcher(\"legend_mouse_over\");\n }, this))\n .on(\"mouseout\", _.bind(function () {\n this.event_dispatcher(\"legend_mouse_out\");\n }, this))\n .on(\"click\", _.bind(function () {\n this.event_dispatcher(\"legend_clicked\");\n }, this));\n new_legend.append(\"rect\")\n .style(\"fill\", function (d, i) {\n return that.get_colors(i);\n })\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", rect_dim)\n .attr(\"height\", rect_dim);\n new_legend.append(\"text\")\n .attr(\"class\", \"legendtext\")\n .attr(\"x\", rect_dim * 1.2)\n .attr(\"y\", rect_dim / 2)\n .attr(\"dy\", \"0.35em\")\n .text(function (d, i) {\n return that.model.get(\"labels\")[i];\n })\n .style(\"fill\", function (d, i) {\n return that.get_colors(i);\n });\n new_legend.merge(this.legend_el);\n const max_length = d3.max(this.model.get(\"labels\"), function (d) {\n return d.length;\n });\n this.legend_el.exit().remove();\n return [1, max_length];\n }\n update_selected(model, value) {\n this.selected_indices = this.calc_bar_indices_from_data_idx(value);\n this.apply_styles();\n }\n clear_style(style_dict, indices) {\n let elements = this.d3el.selectAll(\".bargroup\");\n if (indices) {\n elements = elements.filter(function (d, index) {\n return indices.indexOf(index) !== -1;\n });\n }\n const clearing_style = {};\n for (const key in style_dict) {\n clearing_style[key] = null;\n }\n elements.selectAll(\".bar\").styles(clearing_style);\n }\n set_default_style(indices, elements) {\n this.update_colors();\n this.update_stroke_and_opacities();\n }\n set_style_on_elements(style, indices) {\n // If the index array is undefined or of length=0, exit the\n // function without doing anything\n if (indices === undefined || indices === null || indices.length === 0) {\n return;\n }\n // Also, return if the style object itself is blank\n if (Object.keys(style).length === 0) {\n return;\n }\n let elements = this.d3el.selectAll(\".bargroup\");\n elements = elements.filter(function (data, index) {\n return indices.indexOf(index) !== -1;\n });\n elements.selectAll(\".rect\").styles(style);\n }\n invert_point(pixel) {\n // Sets the selected to the data contained in the bin closest\n // to the value of the pixel.\n // Used by Index Selector.\n if (pixel === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return;\n }\n const bar_width = this.calculate_bar_width();\n //adding \"bar_width / 2.0\" to bin_pixels as we need to select the\n //bar whose center is closest to the current location of the mouse.\n const abs_diff = this.bin_pixels.map(function (elem) {\n return Math.abs(elem + bar_width / 2.0 - pixel);\n });\n const sel_index = abs_diff.indexOf(d3.min(abs_diff));\n this.model.set(\"selected\", this.calc_data_indices([sel_index]));\n this.touch();\n }\n selector_changed(point_selector, rect_selector) {\n if (point_selector === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return [];\n }\n const pixels = this.pixel_coords;\n const indices = new Uint32Array(_.range(pixels.length));\n const selected_bins = indices.filter(index => {\n return rect_selector(pixels[index]);\n });\n this.model.set(\"selected\", this.calc_data_indices(selected_bins));\n this.touch();\n }\n calc_data_indices(indices) {\n //input is a list of indices corresponding to the bars. Output is\n //the list of indices in the data\n const intervals = this.reduce_intervals(indices);\n if (intervals.length === 0) {\n return [];\n }\n const x_data = this.model.get(\"sample\");\n const num_intervals = intervals.length;\n const indices_data = new Uint32Array(_.range(x_data.length));\n const selected = indices_data.filter(index => {\n const elem = x_data[index];\n for (let iter = 0; iter < num_intervals; iter++) {\n if (elem <= intervals[iter][1] && elem >= intervals[iter][0]) {\n return true;\n }\n }\n return false;\n });\n return selected;\n }\n reduce_intervals(indices) {\n //for a series of indices, reduces them to the minimum possible\n //intervals on which the search can be performed.\n //return value is an array of arrays containing the start and end\n //points of the intervals represented by the indices.\n const intervals = [];\n if (indices.length !== 0) {\n indices.sort();\n let start_index = indices[0];\n let end_index = indices[0];\n for (let iter = 1; iter < indices.length; iter++) {\n if (indices[iter] === (end_index + 1)) {\n end_index++;\n }\n else {\n intervals.push([this.model.x_bins[start_index],\n this.model.x_bins[end_index + 1]]);\n start_index = end_index = indices[iter];\n }\n }\n intervals.push([this.model.x_bins[start_index],\n this.model.x_bins[end_index + 1]]);\n }\n return intervals;\n }\n calc_data_indices_from_data_range(start_pixel, end_pixel) {\n //Input is pixel values and output is the list of indices for which\n //the `sample` value lies in the interval\n const idx_start = d3.max([0, d3.bisectLeft(this.bin_pixels, start_pixel) - 1]);\n const idx_end = d3.min([this.model.num_bins, d3.bisectRight(this.bin_pixels, end_pixel)]);\n const x_data = this.model.get(\"sample\");\n const that = this;\n return _.filter(_.range(x_data.length), function (iter) {\n return (x_data[iter] >= that.model.x_bins[idx_start] &&\n x_data[iter] <= that.model.x_bins[idx_end]);\n });\n }\n calc_bar_indices_from_data_idx(selected) {\n //function to calculate bar indices for a given list of data\n //indices\n if (selected === null) {\n return null;\n }\n const x_data = this.model.get(\"sample\");\n const data = Array.from(selected).map(function (idx) {\n return x_data[idx];\n });\n let bar_indices = [];\n for (let iter = 0; iter < data.length; iter++) {\n //x_bins is of length num_bars+1. So if the max element is\n //selected, we get a bar index which is equal to num_bars.\n let index = Math.min(_.indexOf(this.model.x_bins, data[iter], true), this.model.x_bins.length - 2);\n //if the data point is not one of the bins, then find the index\n //where it is to be inserted.\n if (index === -1) {\n index = _.sortedIndex(this.model.x_bins, data[iter]) - 1;\n }\n bar_indices.push(index);\n }\n bar_indices.sort();\n bar_indices = _.uniq(bar_indices, true);\n return bar_indices;\n }\n reset_selection() {\n this.selected_indices = [];\n this.model.set(\"selected\", null);\n this.touch();\n }\n compute_view_padding() {\n }\n}\nexports.Hist = Hist;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9IaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCw4Q0FBZ0M7QUFDaEMsdUNBQXlCO0FBQ3pCLDJFQUEyRTtBQUMzRSxpRUFBaUU7QUFDakUsTUFBTSxVQUFVLEdBQUcsY0FBVyxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUEsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRS9FLCtDQUFpQztBQUNqQyxpQ0FBOEI7QUFHOUIsTUFBYSxJQUFLLFNBQVEsV0FBSTtJQUUxQixNQUFNO1FBQ0YsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFD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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"));\nconst _ = __importStar(require(\"underscore\"));\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass OHLCModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"OHLCModel\", _view_name: \"OHLC\", x: [], y: [], scales_metadata: {\n x: { orientation: \"horizontal\", dimension: \"x\" },\n y: { orientation: \"vertical\", dimension: \"y\" }\n }, marker: 'candle', stroke: null, stroke_width: 1.0, colors: ['green', 'red'], opacities: [], format: 'ohlc' });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"x\", \"y\"], this.update_data, this);\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.on(\"change:format\", this.update_format, this);\n this.px = { o: -1, h: -1, l: -1, c: -1 };\n this.mark_data = [];\n this.display_el_classes = [\"stick_body\"];\n this.update_data();\n this.update_domains();\n this.update_format();\n }\n update_format() {\n this.update_data();\n this.trigger(\"format_updated\");\n }\n update_data() {\n let x_data = this.get(\"x\");\n let y_data = this.get(\"y\");\n const format = this.get(\"format\");\n // Local private function to report errors in format\n function print_bad_format(format) {\n if (console) {\n console.error(\"Invalid OHLC format: '\" + format + \"'\");\n }\n }\n // Generate positional map and check for duplicate characters\n this.px = format.toLowerCase().split(\"\")\n .reduce(function (dict, key, val) {\n if (dict[key] !== -1) {\n print_bad_format(format);\n x_data = [];\n y_data = [];\n }\n dict[key] = val;\n return dict;\n }, { o: -1, h: -1, l: -1, c: -1 });\n // We cannot have high without low and vice versa\n if ((this.px.h !== -1 && this.px.l === -1) ||\n (this.px.h === -1 && this.px.l !== -1) ||\n format.length < 2 || format.length > 4) {\n print_bad_format(format);\n x_data = [];\n y_data = [];\n }\n else {\n // Verify that OHLC data is valid\n const px = this.px;\n if ((this.px.h !== -1 &&\n !y_data.every(function (d) {\n return (d[px.h] === d3.max(d) &&\n d[px.l] === d3.min(d));\n })) || !y_data.every(function (d) {\n return d.length === format.length;\n })) {\n x_data = [];\n y_data = [];\n if (console)\n console.error(\"Invalid OHLC data\");\n }\n }\n // Make x and y data the same length\n if (x_data.length > y_data.length) {\n x_data = x_data.slice(0, y_data.length);\n }\n else if (x_data.length < y_data.length) {\n y_data = y_data.slice(0, x_data.length);\n }\n this.mark_data = _.zip(x_data, y_data);\n this.mark_data.forEach(function (elem, i) { elem.index = i; });\n this.update_domains();\n this.trigger(\"data_updated\");\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n const scales = this.get(\"scales\");\n const x_scale = scales.x, y_scale = scales.y;\n let min_x_dist = Number.POSITIVE_INFINITY;\n let max_y_height = 0;\n let dist = 0;\n let height = 0;\n /*\n * Compute the minimum x distance between the data points. We will\n * use this to pad either side of the x domain.\n * Also compute the maximum height of all of the marks (i.e. maximum\n * distance from high to low) and use that to pad the y domain.\n */\n for (let i = 0; i < this.mark_data.length; i++) {\n if (i > 0) {\n dist = this.mark_data[i][0] - this.mark_data[i - 1][0];\n if (dist < min_x_dist)\n min_x_dist = dist;\n }\n height = this.mark_data[i][this.px.h] -\n this.mark_data[i][this.px.l];\n if (height > max_y_height)\n max_y_height = height;\n }\n if (this.mark_data.length < 2) {\n min_x_dist = 0;\n }\n let min;\n let max;\n // X Scale\n if ((!this.get(\"preserve_domain\").x) && this.mark_data.length !== 0) {\n if (x_scale.type === \"ordinal\") {\n x_scale.compute_and_set_domain(this.mark_data.map(function (d) { return d[0]; }));\n }\n else {\n min = d3.min(this.mark_data.map(function (d) {\n return d[0];\n }));\n max = d3.max(this.mark_data.map(function (d) {\n return d[0];\n }));\n if (max instanceof Date)\n max = max.getTime();\n x_scale.set_domain([min - min_x_dist / 2, max + min_x_dist / 2], this.model_id + \"_x\");\n }\n }\n else {\n x_scale.del_domain([], this.model_id + \"_x\");\n }\n // Y Scale\n if ((!this.get(\"preserve_domain\").y) && this.mark_data.length !== 0) {\n // Remember that elem contains OHLC data here so we cannot use\n // compute_and_set_domain\n let top = this.px.h;\n let bottom = this.px.l;\n if (top === -1 || bottom === -1) {\n top = this.px.o;\n bottom = this.px.c;\n }\n min = d3.min(this.mark_data.map(function (d) {\n return (d[1][bottom] < d[1][top]) ? d[1][bottom] : d[1][top];\n }));\n max = d3.max(this.mark_data.map(function (d) {\n return (d[1][top] > d[1][bottom]) ? d[1][top] : d[1][bottom];\n }));\n if (max instanceof Date)\n max = max.getTime();\n y_scale.set_domain([min - max_y_height, max + max_y_height], this.model_id + \"_y\");\n }\n else {\n y_scale.del_domain([], this.model_id + \"_y\");\n }\n }\n get_data_dict(data, index) {\n const that = this;\n const return_val = {\n index: index,\n x: data.x\n };\n [\"open\", \"low\", \"high\", \"close\"].forEach(function (str) {\n return_val[str] = data.y[that.px[str.substr(0, 1)]];\n });\n return return_val;\n }\n}\nOHLCModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { x: serialize.array_or_json, y: serialize.array_or_json });\nexports.OHLCModel = OHLCModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT0hMQ01vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL09ITENNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLGtEQUFrRDtBQUNsRCw4Q0FBZ0M7QUFDaEMsMkNBQXdDO0FBQ3hDLHVEQUF5QztBQUV6QyxNQUFhLFNBQVUsU0FBUSxxQkFBUztJQUVwQyxRQUFRO1FBQ0oseUJBQVcscUJBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3JDLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLFVBQVUsRUFBRSxNQUFNLEVBRWxCLENBQUMsRUFBRSxFQUFFLEVBQ0wsQ0FBQyxFQUFFLEVBQUUsRUFDTCxlQUFlLEVBQUU7Z0JBQ2IsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNoRCxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7YUFDakQsRUFDRCxNQUFNLEVBQUUsUUFBUSxFQUNoQixNQUFNLEVBQUUsSUFBSSxFQUNaLFlBQVksRUFBRSxHQUFHLEVBQ2pCLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFDeEIsU0FBUyxFQUFFLEVBQUUsRUFDYixNQUFNLEVBQUUsTUFBTSxJQUNoQjtJQUNOLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxj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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-scale\"), require(\"d3-scale-chromatic\"));\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass HistModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"HistModel\", _view_name: \"Hist\", sample: [], count: [], scales_metadata: {\n sample: { orientation: \"horizontal\", dimension: \"x\" },\n count: { orientation: \"vertical\", dimension: \"y\" }\n }, bins: 10, midpoints: [], colors: ['steelblue'], stroke: null, opacities: [], normalized: false });\n }\n initialize(attributes, options) {\n // TODO: should not need to set this.data\n super.initialize(attributes, options);\n this.mark_data = [];\n // For the histogram, changing the \"sample\" scale changes the \"count\" values being plotted.\n // Hence, on change of the value of \"preserve_domain\", we must call the \"update_data\"\n // function, and not merely \"update_domains\".\n this.on_some_change([\"bins\", \"sample\", \"preserve_domain\"], this.update_data, this);\n this.update_data();\n this.on(\"change:normalized\", function () { this.normalize_data(true); }, this);\n this.normalize_data(true);\n }\n update_data() {\n let x_data = this.get(\"sample\");\n const scales = this.get(\"scales\");\n const x_scale = scales.sample;\n // TODO: This potentially triggers domain_changed and therefore a\n // Draw, while update_data is generally followed by a Draw.\n this.num_bins = this.get(\"bins\");\n if (x_data.length == 0) {\n this.mark_data = [];\n this.x_mid = [];\n this.count = [];\n this.x_bins = [];\n }\n else {\n if (!this.get(\"preserve_domain\").sample) {\n x_scale.compute_and_set_domain(x_data, this.model_id + \"_sample\");\n }\n else {\n x_scale.del_domain([], this.model_id + \"_sample\");\n }\n this.min_x = x_scale.domain[0];\n this.max_x = x_scale.domain[1];\n const that = this;\n x_data = x_data.filter(function (d) {\n return (d <= that.max_x && d >= that.min_x);\n });\n // since x_data may be a TypedArray, explicitly use Array.map\n const x_data_ind = Array.prototype.map.call(x_data, function (d, i) {\n return { index: i, value: d };\n });\n this.x_bins = this.create_uniform_bins(this.min_x, this.max_x, this.num_bins);\n this.x_mid = this.x_bins.map(function (d, i) {\n return 0.5 * (d + that.x_bins[i - 1]);\n }).slice(1);\n this.mark_data = d3.histogram().thresholds(this.x_bins).value(function (d) {\n return d.value;\n })(x_data_ind);\n //adding index attribute to mark_data of the model\n this.mark_data.forEach(function (data, index) { data.index = index; });\n }\n this.normalize_data(false);\n this.set(\"midpoints\", this.x_mid);\n this.set(\"count\", new Float64Array(this.count));\n this.update_domains();\n this.save_changes();\n this.trigger(\"data_updated\");\n }\n normalize_data(save_and_update) {\n this.count = this.mark_data.map(function (d) { return d.length; });\n if (this.get(\"normalized\")) {\n let x_width = 1;\n if (this.mark_data.length > 0) {\n x_width = this.mark_data[0].x1 - this.mark_data[0].x0;\n }\n const sum = this.count.reduce(function (a, b) { return a + b; }, 0);\n if (sum != 0) {\n this.count = this.count.map(function (a) { return a / (sum * x_width); });\n }\n }\n const that = this;\n this.mark_data.forEach(function (el, it) { el['y'] = that.count[it]; });\n if (save_and_update) {\n this.set(\"count\", new Float64Array(this.count));\n this.update_domains();\n this.save_changes();\n this.trigger(\"data_updated\");\n }\n }\n get_data_dict(data, index) {\n const return_dict = {};\n return_dict.midpoint = this.x_mid[index];\n return_dict.bin_start = this.x_bins[index];\n return_dict.bin_end = this.x_bins[index + 1];\n return_dict.index = index;\n return_dict.count = this.count[index];\n return return_dict;\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n // For histogram, changing the x-scale domain changes a lot of\n // things including the data which is to be plotted. So the x-domain\n // change is handled by the update_data function and only the\n // y-domain change is handled by this function.\n const y_scale = this.get(\"scales\").count;\n if (!this.get(\"preserve_domain\").count) {\n y_scale.set_domain([0, d3.max(this.mark_data, function (d) {\n return d.y;\n }) * 1.05], this.model_id + \"_count\");\n }\n }\n create_uniform_bins(min_val, max_val, num_bins) {\n const diff = max_val - min_val;\n const step_size = (diff) / num_bins;\n const return_val = [];\n for (let i = 0; i < num_bins; i++) {\n return_val[i] = min_val + i * step_size;\n }\n return_val[num_bins] = max_val;\n return return_val;\n }\n}\nHistModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { sample: serialize.array_or_json, count: serialize.array_or_json });\nexports.HistModel = HistModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGlzdE1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0hpc3RNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLHNHQUFzRztBQUN0RywyQ0FBd0M7QUFDeEMsdURBQXlDO0FBRXpDLE1BQWEsU0FBVSxTQUFRLHFCQUFTO0lBRXBDLFFBQVE7UUFDSix5QkFBVyxxQkFBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFDckMsV0FBVyxFQUFFLFdBQVcsRUFDeEIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLEVBQUUsRUFDVixLQUFLLEVBQUUsRUFBRSxFQUNULGVBQWUsRUFBRTtnQkFDYixNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JELEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTthQUNyRCxFQUNELElBQUksRUFBRSxFQUFFLEVBQ1IsU0FBUyxFQUFFLEVBQUUsRUFDYixNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFDckIsTUFBTSxFQUFFLElBQUksRUFDWixTQUFTLEVBQUUsRUFBRSxFQUNiLFVBQVUsRUFBRSxLQUFLLElBQ25CO0lBQ04sQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTztRQUMxQix5Q0FBeUM7UUFDekMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsMkZBQTJGO1FBQzNGLHFGQUFxRjtRQUNyRiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFF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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst base_1 = require(\"@jupyter-widgets/base\");\nconst version_1 = require(\"./version\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass SelectorModel extends base_1.WidgetModel {\n defaults() {\n return Object.assign({}, base_1.WidgetModel.prototype.defaults(), { _model_name: \"SelectorModel\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, marks: [] });\n }\n}\nSelectorModel.serializers = Object.assign({}, base_1.WidgetModel.serializers, { marks: { deserialize: base_1.unpack_models } });\nexports.SelectorModel = SelectorModel;\nclass OneDSelectorModel extends SelectorModel {\n defaults() {\n return Object.assign({}, SelectorModel.prototype.defaults(), { _model_name: \"OneDSelectorModel\", scale: null });\n }\n}\nOneDSelectorModel.serializers = Object.assign({}, SelectorModel.serializers, { scale: { deserialize: base_1.unpack_models } });\nexports.OneDSelectorModel = OneDSelectorModel;\nclass TwoDSelectorModel extends SelectorModel {\n defaults() {\n return Object.assign({}, SelectorModel.prototype.defaults(), { _model_name: \"TwoDSelectorModel\", x_scale: null, y_scale: null });\n }\n}\nTwoDSelectorModel.serializers = Object.assign({}, SelectorModel.serializers, { x_scale: { deserialize: base_1.unpack_models }, y_scale: { deserialize: base_1.unpack_models } });\nexports.TwoDSelectorModel = TwoDSelectorModel;\nclass FastIntervalSelectorModel extends OneDSelectorModel {\n defaults() {\n return Object.assign({}, OneDSelectorModel.prototype.defaults(), { _model_name: \"FastIntervalSelectorModel\", _view_name: \"FastIntervalSelector\", selected: null, color: null, size: null });\n }\n}\nFastIntervalSelectorModel.serializers = Object.assign({}, OneDSelectorModel.serializers, { selected: serialize.array_or_json });\nexports.FastIntervalSelectorModel = FastIntervalSelectorModel;\nclass IndexSelectorModel extends OneDSelectorModel {\n defaults() {\n return Object.assign({}, OneDSelectorModel.prototype.defaults(), { _model_name: \"IndexSelectorModel\", _view_name: \"IndexSelector\", selected: null, line_width: 2, color: null });\n }\n}\nIndexSelectorModel.serializers = Object.assign({}, OneDSelectorModel.serializers, { selected: serialize.array_or_json });\nexports.IndexSelectorModel = IndexSelectorModel;\nclass BrushIntervalSelectorModel extends OneDSelectorModel {\n defaults() {\n return Object.assign({}, OneDSelectorModel.prototype.defaults(), { _model_name: \"BrushIntervalSelectorModel\", _view_name: \"BrushIntervalSelector\", brushing: false, selected: null, color: null, orientation: \"horizontal\" });\n }\n}\nBrushIntervalSelectorModel.serializers = Object.assign({}, OneDSelectorModel.serializers, { selected: serialize.array_or_json });\nexports.BrushIntervalSelectorModel = BrushIntervalSelectorModel;\nclass BrushSelectorModel extends TwoDSelectorModel {\n defaults() {\n return Object.assign({}, TwoDSelectorModel.prototype.defaults(), { _model_name: \"BrushSelectorModel\", _view_name: \"BrushSelector\", clear: false, brushing: false, selected_x: null, selected_y: null, color: null });\n }\n}\nBrushSelectorModel.serializers = Object.assign({}, TwoDSelectorModel.serializers, { selected_x: serialize.array_or_json, selected_y: serialize.array_or_json });\nexports.BrushSelectorModel = BrushSelectorModel;\nclass MultiSelectorModel extends OneDSelectorModel {\n defaults() {\n return Object.assign({}, OneDSelectorModel.prototype.defaults(), { _model_name: \"MultiSelectorModel\", _view_name: \"MultiSelector\", names: [], brushing: false, selected: {}, _selected: {}, show_names: true });\n }\n}\nexports.MultiSelectorModel = MultiSelectorModel;\nclass LassoSelectorModel extends TwoDSelectorModel {\n defaults() {\n return Object.assign({}, TwoDSelectorModel.prototype.defaults(), { _model_name: \"LassoSelectorModel\", _view_name: \"LassoSelector\", color: null });\n }\n}\nexports.LassoSelectorModel = LassoSelectorModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0b3JNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWxlY3Rvck1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCxnREFFK0I7QUFFL0IsdUNBQXlDO0FBQ3pDLHVEQUF5QztBQUV6QyxNQUNNLGFBQWMsU0FBUSxrQkFBVztJQUVuQyxRQUFRO1FBQ0oseUJBQVcsa0JBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3ZDLFdBQVcsRUFBRSxlQUFlLEVBQzVCLGFBQWEsRUFBRSxRQUFRLEVBQ3ZCLFlBQVksRUFBRSxRQUFRLEVBQ3RCLHFCQUFxQixFQUFFLHNCQUFZLEVBQ25DLG9CQUFvQixFQUFFLHNCQUFZLEVBQ2xDLEtBQUssRUFBRSxFQUFFLElBQ1g7SUFDTixDQUFDOztBQUVNLHlCQUFXLHFCQUNYLGtCQUFXLENBQUMsV0FBVyxJQUMxQixLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsb0JBQWEsRUFBRSxJQUN4QztBQWpCTCxzQ0FrQkM7QUFFRCxNQUFhLGlCQUFrQixTQUFRLGFBQWE7SUFFaEQsUUFBUTtRQUNKLHlCQUFXLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3pDLFdBQVcsRUFBRSxtQkFBbUIsRUFDaEMsS0FBSyxFQUFFLElBQUksSUFDYjtJQUNOLENBQUM7O0FBRU0sNkJBQVcscUJBQ1gsYUFBYSxDQUFDLFdBQVcsSUFDNUIsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLG9CQUFhLEVBQUUsSUFDeEM7QUFaTCw4Q0FhQztBQUVELE1BQWEsaUJBQWtCLFNBQVEsYUFBYTtJQUVoRCxRQUFRO1FBQ0oseUJBQVcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFDekMsV0FBVyxFQUFFLG1CQUFtQixFQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUNiLE9BQU8sRUFBRSxJQUFJLElBQ2hCO0lBQ0wsQ0FBQzs7QUFF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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-selection\"));\n// Hack to fix problem with webpack providing multiple d3 objects\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst _ = __importStar(require(\"underscore\"));\nconst Mark_1 = require(\"./Mark\");\nclass Boxplot extends Mark_1.Mark {\n render() {\n const base_creation_promise = super.render.apply(this);\n const that = this;\n this.selected_style = this.model.get(\"selected_style\");\n this.unselected_style = this.model.get(\"unselected_style\");\n return base_creation_promise.then(function () {\n that.event_listeners = {};\n that.create_listeners();\n that.process_interactions();\n that.draw();\n }, null);\n }\n set_ranges() {\n const x_scale = this.scales.x;\n if (x_scale) {\n x_scale.set_range(this.parent.padded_range(\"x\", x_scale.model));\n }\n const y_scale = this.scales.y;\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n }\n }\n set_positional_scales() {\n const x_scale = this.scales.x;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n const y_scale = this.scales.y;\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n }\n create_listeners() {\n super.create_listeners.apply(this);\n this.listenTo(this.model, \"change:stroke\", this.update_stroke);\n this.listenTo(this.model, \"change:opacities\", this.update_opacities);\n this.listenTo(this.model, \"change:marker\", this.update_marker);\n this.listenTo(this.model, \"change:outlier_fill_color\", this.update_outlier_fill_color);\n this.listenTo(this.model, \"change:box_fill_color\", this.update_box_fill_color);\n this.listenTo(this.model, \"data_updated\", this.draw);\n this.listenTo(this.model, \"change:box_width\", this.update_box_width);\n this.listenTo(this.model, \"change:selected\", this.update_selected);\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n this.listenTo(this.parent, \"bg_clicked\", function () {\n this.event_dispatcher(\"parent_clicked\");\n });\n }\n update_stroke() {\n const stroke = this.model.get(\"stroke\");\n this.d3el.selectAll(\".boxplot\").selectAll(\"path, rect\")\n .style(\"stroke\", stroke);\n this.d3el.selectAll(\".outlier\").style(\"stroke\", stroke);\n if (this.legend_el) {\n this.legend_el.selectAll(\"path\").attr(\"stroke\", stroke);\n this.legend_el.selectAll(\"text\").style(\"fill\", stroke);\n }\n }\n update_outlier_fill_color() {\n this.d3el.selectAll(\".outlier\")\n .style(\"fill\", this.model.get(\"outlier_fill_color\"));\n }\n update_box_fill_color() {\n this.d3el.selectAll(\".box\")\n .style(\"fill\", this.model.get(\"box_fill_color\"));\n }\n update_opacities() {\n const opacities = this.model.get(\"opacities\");\n this.d3el.selectAll(\".boxplot\").style(\"opacity\", function (d, i) {\n return opacities[i];\n });\n if (this.legend_el) {\n this.legend_el.selectAll(\"path\").attr(\"opacity\", function (d, i) {\n return opacities[i];\n });\n }\n }\n update_marker() {\n const marker = this.model.get(\"marker\");\n if (this.legend_el && this.rect_dim) {\n // Draw icon for legend\n this.draw_mark_paths(marker, this.rect_dim / 2);\n }\n // Redraw existing marks\n this.draw_mark_paths(marker, this.calculate_mark_max_width());\n }\n get_box_width() {\n let width = this.model.get(\"box_width\");\n // null box_width means auto calculated box width\n if (!width) {\n const plotWidth = this.parent.plotarea_width;\n const maxWidth = plotWidth / 10.0;\n width = plotWidth / (this.model.mark_data.length + 1) / 1.5;\n width = Math.min(width, maxWidth);\n }\n return width;\n }\n compute_view_padding() {\n //This function sets the padding for the view through the constiables\n //x_padding and y_padding which are view specific paddings in pixel\n const x_padding = this.get_box_width() / 2.0 + 1;\n if (x_padding !== this.x_padding) {\n this.x_padding = x_padding;\n this.trigger(\"mark_padding_updated\");\n }\n }\n update_box_width() {\n this.compute_view_padding();\n this.draw();\n }\n update_idx_selected(model, value) {\n this.selected_indices = value;\n this.apply_styles(value);\n }\n set_style_on_elements(style, indices) {\n if (indices === undefined || indices.length === 0) {\n return;\n }\n let elements = this.d3el.selectAll(\".box\");\n elements = elements.filter(function (data, index) {\n return indices.indexOf(index) != -1;\n });\n elements.styles(style);\n }\n set_default_style(indices) {\n // For all the elements with index in the list indices, the default\n // style is applied.\n this.update_outlier_fill_color();\n this.update_box_fill_color();\n this.update_stroke();\n this.update_opacities();\n }\n clear_style(style_dict, indices) {\n let elements = this.d3el.selectAll(\".boxplot\");\n if (indices !== undefined) {\n elements = elements.filter(function (d, index) {\n return indices.indexOf(index) != -1;\n });\n }\n const clearing_style = {};\n for (let key in style_dict) {\n clearing_style[key] = null;\n }\n elements.styles(clearing_style);\n }\n style_updated(new_style, indices) {\n this.set_default_style(indices);\n this.set_style_on_elements(new_style, indices);\n }\n selected_style_updated(model, style) {\n this.selected_style = style;\n this.style_updated(style, this.selected_indices);\n }\n unselected_style_updated(model, style) {\n this.unselected_style = style;\n const sel_indices = this.selected_indices;\n const unselected_indices = (sel_indices ?\n _.range(this.model.mark_data.length)\n .filter(function (index) {\n return sel_indices.indexOf(index) == -1;\n }) : []);\n this.style_updated(style, unselected_indices);\n }\n //FIXME: should use the selected_style logic\n update_selected_colors(selected_indices) {\n const stroke = this.model.get(\"stroke\");\n const selected_stroke = stroke;\n this.d3el.selectAll(\".boxplot\")\n .style(\"stroke\", function (d, i) {\n return (selected_indices.indexOf(i) > -1) ? selected_stroke : stroke;\n });\n }\n selector_changed(point_selector, rect_selector) {\n if (point_selector === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n this.update_selected_colors([]);\n return [];\n }\n const pixels = this.pixel_coords;\n const indices = new Uint32Array(_.range(pixels.length));\n const selected = indices.filter(index => {\n return rect_selector(pixels[index]);\n });\n this.update_selected_colors(selected);\n this.model.set(\"selected\", selected);\n this.touch();\n }\n invert_point(pixel) {\n if (pixel === undefined) {\n this.update_selected_colors([]);\n this.model.set(\"selected\", null);\n this.touch();\n return;\n }\n const abs_diff = this.x_pixels.map(function (elem) { return Math.abs(elem - pixel); });\n const sel_index = abs_diff.indexOf(d3.min(abs_diff));\n this.model.set(\"selected\", new Uint32Array([sel_index]));\n this.update_selected_colors([sel_index]);\n this.touch();\n return sel_index;\n }\n prepareBoxPlots() {\n // Sets plot data on this.plotData and this.outlierData\n const auto_detect_outliers = this.model.get(\"auto_detect_outliers\") !== false;\n const x_scale = this.scales.x;\n const y_scale = this.scales.y;\n // convert the domain data to the boxes to be drawn on the screen\n // find the quantiles, min/max and outliers for the box plot\n this.plotData = [];\n this.outlierData = [];\n for (let i = 0; i < this.model.mark_data.length; ++i) {\n const values = this.model.mark_data[i];\n const displayValue = {};\n displayValue.x = x_scale.scale(values[0]);\n displayValue.boxUpper = y_scale.scale(d3.quantile(values[1], 0.75));\n displayValue.boxLower = y_scale.scale(d3.quantile(values[1], 0.25));\n displayValue.boxMedian = y_scale.scale(d3.quantile(values[1], 0.5));\n // The domain Y to screen Y is an inverse scale, so be aware of that\n // The max from the domain Y becomes min on the screen (display) scale\n const iqr = displayValue.boxLower - displayValue.boxUpper;\n const lowerBound = displayValue.boxLower + 1.5 * iqr;\n const upperBound = displayValue.boxUpper - 1.5 * iqr;\n displayValue.whiskerMax = Number.MAX_VALUE;\n displayValue.whiskerMin = Number.MIN_VALUE;\n for (let j = 0; j < values[1].length; ++j) {\n const plotY = y_scale.scale(values[1][j]);\n // Find the outlier\n if (auto_detect_outliers && (plotY > lowerBound || plotY < upperBound)) {\n this.outlierData.push({ x: x_scale.scale(values[0]),\n y: plotY });\n }\n else {\n // Find the whisker points max and min from normal data.\n // ( exclude the outliers )\n if (plotY > displayValue.whiskerMin) {\n displayValue.whiskerMin = plotY;\n }\n if (plotY < displayValue.whiskerMax) {\n displayValue.whiskerMax = plotY;\n }\n }\n }\n this.plotData.push(displayValue);\n }\n }\n process_click(interaction) {\n super.process_click(interaction);\n if (interaction === \"select\") {\n this.event_listeners.parent_clicked = this.reset_selection;\n this.event_listeners.element_clicked = this.box_click_handler;\n }\n }\n box_click_handler(args) {\n const index = args.index;\n const that = this;\n const idx = this.model.get(\"selected\") || [];\n let selected = Array.from(idx);\n // index of box i. Checking if it is already present in the list.\n const elem_index = selected.indexOf(index);\n // Replacement for \"Accel\" modifier.\n const accelKey = d3GetEvent().ctrlKey || d3GetEvent().metaKey;\n if (elem_index > -1 && accelKey) {\n // if the index is already selected and if accel key is\n // pressed, remove the element from the list\n selected.splice(elem_index, 1);\n }\n else {\n if (d3GetEvent().shiftKey) {\n //If shift is pressed and the element is already\n //selected, do not do anything\n if (elem_index > -1) {\n return;\n }\n //Add elements before or after the index of the current\n //box which has been clicked\n const min_index = (selected.length !== 0) ?\n d3.min(selected) : -1;\n const max_index = (selected.length !== 0) ?\n d3.max(selected) : that.model.mark_data.length;\n if (index > max_index) {\n _.range(max_index + 1, index + 1).forEach(function (i) {\n selected.push(i);\n });\n }\n else if (index < min_index) {\n _.range(index, min_index).forEach(function (i) {\n selected.push(i);\n });\n }\n }\n else if (accelKey) {\n //If accel is pressed and the box is not already selected\n //add the box to the list of selected boxes.\n selected.push(index);\n }\n // updating the array containing the box indexes selected\n // and updating the style\n else {\n //if accel is not pressed, then clear the selected ones\n //and set the current element to the selected\n selected = [];\n selected.push(index);\n }\n }\n this.model.set(\"selected\", ((selected.length === 0) ? null : new Uint32Array(selected)), { updated_view: this });\n this.touch();\n const e = d3GetEvent();\n if (e.cancelBubble !== undefined) { // IE\n e.cancelBubble = true;\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n e.preventDefault();\n }\n reset_selection() {\n this.model.set(\"selected\", null);\n this.selected_indices = null;\n this.touch();\n }\n update_selected(model, value) {\n this.selected_indices = value;\n this.apply_styles();\n }\n draw() {\n this.set_ranges();\n const x_scale = this.scales.x;\n // get the visual representation of boxplots, set as state\n this.prepareBoxPlots();\n // Draw the visual elements with data which was bound\n this.draw_mark_paths(\".boxplot\", this.d3el);\n // Keep the pixel coordinates of the boxes, for interactions.\n this.x_pixels = this.model.mark_data.map(function (el) { return x_scale.scale(el[0]) + x_scale.offset; });\n const width = this.get_box_width() / 2;\n this.pixel_coords = this.plotData.map(function (d) {\n return [[d.x - width, d.x + width],\n [d.boxLower, d.boxUpper]];\n });\n }\n draw_mark_paths(parentClass, selector) {\n const that = this;\n const plotData = this.plotData;\n const outlierData = this.outlierData;\n const color = this.model.get(\"color\");\n const boxplot = this.d3el.selectAll(parentClass).data(plotData);\n const fillcolor = this.model.get(\"box_fill_color\");\n // Create new\n const new_boxplots = boxplot.enter()\n .append(\"g\")\n .attr(\"class\", \"boxplot\")\n .attr(\"id\", function (d, i) { return \"boxplot\" + i; });\n ///////////////////////////////////////////////////////////////////\n //\n // We translate the whole element of 'boxplot' to the x location\n // and then scale each of these elements with Y scale.\n //\n // ( ) <--- outliers (as circles)\n // ( )\n //\n // ------- <--- whisker_max_end (path as the max)\n // |\n // | <--- whisker_max (path from top of the box to max)\n // |\n // ---------\n // | |\n // | |\n // | | <--- box (as a rect)\n // | |\n // | |\n // ---------\n // |\n // | <--- whisker_min (path from bottom of the box to min)\n // |\n // ------- <--- whisker_min_end (path at min value)\n //\n ///////////////////////////////////////////////////////////////////\n new_boxplots.append(\"path\").attr(\"class\", \"whisker_max\");\n new_boxplots.append(\"path\").attr(\"class\", \"whisker_max_end\");\n new_boxplots.append(\"path\").attr(\"class\", \"whisker_min\");\n new_boxplots.append(\"path\").attr(\"class\", \"whisker_min_end\");\n new_boxplots.append(\"rect\").attr(\"class\", \"box\");\n new_boxplots.append(\"path\").attr(\"class\", \"median_line\");\n new_boxplots.append(\"g\").attr(\"class\", \"outliers\");\n const scaleX = this.scales.x;\n const xOffset = scaleX.model.type === \"ordinal\" ? scaleX.scale.bandwidth() / 2 : 0;\n selector.selectAll(\".boxplot\").data(plotData)\n .style(\"stroke\", this.model.get(\"stroke\"))\n .style(\"opacity\", color)\n .attr(\"transform\", function (d, i) {\n return \"translate(\" + (d.x + xOffset) + \", 0)\";\n });\n //Box\n const width = this.get_box_width();\n selector.selectAll(\".box\").data(plotData)\n .style(\"fill\", fillcolor)\n .attr(\"x\", -width / 2)\n .attr(\"width\", width)\n .attr(\"y\", function (d, i) {\n return d.boxUpper;\n })\n .attr(\"height\", function (d, i) {\n return (d.boxLower - d.boxUpper);\n }).on(\"click\", function (d, i) {\n return that.event_dispatcher(\"element_clicked\", { \"data\": d, \"index\": i });\n });\n //Median line\n selector.selectAll(\".median_line\").data(plotData)\n .style(\"stroke-width\", 2)\n .attr(\"d\", function (d, i) {\n const x = 0;\n const medianY = d.boxMedian;\n return \"M\" + (x - width / 2) + \",\" +\n medianY + \" L\" + (x + width / 2) + \",\" + medianY;\n });\n //Max and Min Whiskers\n //Max to top of the Box\n selector.selectAll(\".whisker_max\").data(plotData)\n .attr(\"d\", function (d, i) {\n const x = 0;\n // The price points are sorted so the last element is the max\n const maxY = d.whiskerMax;\n const boxY = d.boxUpper;\n return \"M\" + x + \",\" + maxY + \" L\" + x + \",\" + boxY;\n }).attr(\"stroke-dasharray\", function (d, i) {\n return \"5,5\";\n });\n selector.selectAll(\".whisker_max_end\").data(plotData)\n .attr(\"d\", function (d, i) {\n const x = 0;\n // The price points are sorted, so 1st element is min\n const maxY = (d.whiskerMax);\n return \"M\" + (x - width / 2) + \",\" + maxY + \" L\" + (x + width / 2) + \",\" + maxY;\n });\n //Min to the bottom of the box\n //Max to top of the Box\n selector.selectAll(\".whisker_min\").data(plotData)\n .attr(\"d\", function (d, i) {\n const x = 0;\n // The price points are sorted, so 1st element is min\n const minY = (d.whiskerMin);\n const boxY = (d.boxLower);\n return \"M\" + x + \",\" + minY + \" L\" + x + \",\" + boxY;\n }).attr(\"stroke-dasharray\", function (d, i) {\n return \"5,5\";\n });\n selector.selectAll(\".whisker_min_end\").data(plotData)\n .attr(\"d\", function (d, i) {\n const x = 0;\n // The price points are sorted, so 1st element is min\n const minY = (d.whiskerMin);\n return \"M\" + (x - width / 2) + \",\" + minY + \" L\" + (x + width / 2) + \",\" + minY;\n });\n boxplot.exit().remove();\n // Add the outliers group\n const outliers = selector.selectAll(\".outlier\")\n .data(outlierData);\n // Add/remove elements as needed\n outliers.enter()\n .append(\"circle\")\n .attr(\"class\", \"outlier\");\n outliers.exit()\n .remove();\n // Set outlier data\n selector.selectAll(\".outlier\").data(outlierData)\n .style(\"fill\", this.model.get(\"outlier_fill_color\"))\n .attr(\"cx\", function (d) {\n return d.x + xOffset;\n })\n .attr(\"r\", 3)\n .attr(\"cy\", function (d) {\n return d.y;\n });\n this.apply_styles(this.selected_indices);\n }\n calculate_mark_max_width() {\n const that = this;\n const x_scale = this.scales.x;\n let min_distance = Infinity;\n for (let i = 1; i < that.model.mark_data.length; i++) {\n let dist = x_scale.scale(that.model.mark_data[i][0]) -\n x_scale.scale(that.model.mark_data[i - 1][0]);\n dist = (dist < 0) ? (-1 * dist) : dist;\n if (dist < min_distance)\n min_distance = dist;\n }\n let mark_width = 0;\n if (min_distance == Infinity) {\n mark_width = (x_scale.scale(this.model.max_x) -\n x_scale.scale(this.model.min_x)) / 2;\n }\n else {\n mark_width = min_distance;\n }\n return mark_width;\n }\n relayout() {\n super.relayout.apply(this);\n this.set_ranges();\n this.compute_view_padding();\n this.d3el.select(\".intselmouse\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height);\n // We have to redraw every time that we relayout\n this.draw();\n }\n draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) {\n const stroke = this.model.get(\"stroke\");\n this.rect_dim = inter_y_disp * 0.8;\n const that = this;\n this.legend_el = elem.selectAll(\".legend\" + this.uuid)\n .data([this.model.mark_data]);\n const leg = this.legend_el.enter().append(\"g\")\n .attr(\"transform\", function (d, i) {\n return \"translate(0, \" + (i * inter_y_disp + y_disp) + \")\";\n })\n .attr(\"class\", \"legend\" + this.uuid)\n .on(\"mouseover\", _.bind(this.highlight_axes, this))\n .on(\"mouseout\", _.bind(this.unhighlight_axes, this));\n // Add stroke color and set position\n leg.selectAll(\"path\")\n .attr(\"stroke\", stroke)\n .attr(\"transform\", \"translate(\" + (that.rect_dim / 2) + \",0)\");\n // Draw icon and text\n // this.draw_legend_icon(that.rect_dim, leg);\n this.legend_el.append(\"text\")\n .attr(\"class\", \"legendtext\")\n .attr(\"x\", that.rect_dim * 1.2)\n .attr(\"y\", that.rect_dim / 2)\n .attr(\"dy\", \"0.35em\")\n .text(function (d, i) { return that.model.get(\"labels\")[i]; })\n .style(\"fill\", stroke);\n const max_length = d3.max(this.model.get(\"labels\"), function (d) {\n return d.length;\n });\n this.legend_el.exit().remove();\n return [1, max_length];\n }\n}\nexports.Boxplot = Boxplot;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm94cGxvdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb3hwbG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsOEJBQTRCO0FBQzVCLDJFQUEyRTtBQUMzRSxpRUFBaUU7QUFDakUsTUFBTSxVQUFVLEdBQUcsY0FBVyxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUEsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9FLDhDQUFnQztBQUNoQyxpQ0FBOEI7QUFHOUIsTUFBYSxPQUFRLFNBQVEsV0FBSTtJQUU3QixNQUFNO1FBQ0YsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFFbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTNELE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsVUFBVTtRQUNOLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUcsT0FBTyxFQUFFO1lBQ1IsT0FBTyxD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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-selection\"));\nconst _ = __importStar(require(\"underscore\"));\nconst Selector_1 = require(\"./Selector\");\nclass IndexSelector extends Selector_1.BaseXSelector {\n render() {\n super.render();\n this.active = false;\n this.dirty = false;\n const that = this;\n const scale_creation_promise = this.create_scales();\n Promise.all([this.mark_views_promise, scale_creation_promise]).then(function () {\n that.line = that.d3el.append(\"line\")\n .attr(\"class\", \"selector indsel\")\n .attr(\"x1\", 0)\n .attr(\"y1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y2\", that.height)\n .attr(\"stroke-width\", that.model.get(\"line_width\"))\n .attr(\"pointer-events\", \"none\")\n .attr(\"visibility\", \"hidden\");\n that.color_change();\n //container for mouse events\n that.background = that.d3el.append(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", that.width)\n .attr(\"height\", that.height)\n .attr(\"class\", \"selector selectormouse\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"visibility\", \"hidden\");\n that.background.on(\"mousemove\", _.bind(that.mousemove, that))\n .on(\"click\", _.bind(that.initial_click, that));\n that.create_listeners();\n that.selected_changed();\n });\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:color\", this.color_change);\n }\n color_change() {\n if (this.model.get(\"color\") !== null) {\n this.line.style(\"stroke\", this.model.get(\"color\"));\n }\n }\n initial_click() {\n this.line.attr(\"visibility\", \"visible\");\n this.click();\n this.background.on(\"click\", _.bind(this.click, this));\n }\n click() {\n this.active = !this.active;\n }\n mousemove() {\n if (!this.active) {\n return;\n }\n this.dirty = true;\n const mouse_pos = d3.mouse(this.background.node());\n const xpixel = mouse_pos[0];\n //update the index vertical line\n this.line.attr(\"x1\", xpixel).attr(\"x2\", xpixel);\n this.set_selected(\"selected\", [this.invert_pixel(xpixel)]);\n _.each(this.mark_views, function (mark_view) {\n mark_view.invert_point(xpixel);\n });\n this.touch();\n this.dirty = false;\n }\n invert_pixel(pixel) {\n return this.scale.invert(pixel);\n }\n reset() {\n this.active = false;\n if (this.line !== undefined && this.line !== null) {\n this.line.attr(\"x1\", 0)\n .attr(\"x2\", 0)\n .attr(\"visibility\", \"hidden\");\n }\n if (this.background !== undefined && this.background !== null) {\n this.background.on(\"click\", _.bind(this.initial_click, this));\n }\n this.model.set(\"selected\", null);\n _.each(this.mark_views, function (mark_view) {\n mark_view.invert_point();\n });\n this.touch();\n }\n update_scale_domain(ignore_gui_update) {\n // Call the base class function to update the scale.\n super.update_scale_domain();\n if (ignore_gui_update !== true) {\n this.selected_changed();\n }\n }\n selected_changed() {\n if (this.dirty) {\n //this change was most probably triggered from the js side and\n //should be ignored.\n return;\n }\n //reposition the interval selector and set the selected attribute.\n const selected = this.model.get(\"selected\") || [];\n if (selected.length === 0) {\n this.reset();\n }\n else if (selected.length != 1) {\n // invalid value for selected. Ignoring the value\n return;\n }\n else {\n const pixel = this.scale.scale(selected[0]);\n if (this.line !== undefined && this.line !== null) {\n this.line.attr(\"x1\", 0)\n .attr(\"x2\", 0)\n .attr(\"visibility\", \"visible\");\n }\n //the selected may be called before the index selector is\n //active for the first time.\n this.background.on(\"click\", _.bind(this.click, this));\n _.each(this.mark_views, function (mark_view) {\n mark_view.invert_point(pixel);\n });\n }\n }\n relayout() {\n super.relayout();\n this.line.attr(\"y1\", 0)\n .attr(\"y2\", this.height);\n this.background.attr(\"width\", this.width)\n .attr(\"height\", this.height);\n this.set_range([this.scale]);\n }\n set_range(array) {\n for (let iter = 0; iter < array.length; iter++) {\n array[iter].set_range([0, this.width]);\n }\n }\n}\nexports.IndexSelector = IndexSelector;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5kZXhTZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9JbmRleFNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsc0RBQXNEO0FBQ3RELDhDQUFnQztBQUNoQyx5Q0FBMkM7QUFFM0MsTUFBYSxhQUFjLFNBQVEsd0JBQWE7SUFFNUMsTUFBTTtRQUNGLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7aUJBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUM7aUJBQ2hDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztpQkFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDbEQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztpQkFDOUIsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFcEIsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUN2QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDWixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDWixJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztpQkFDM0IsSUFBSSxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQztpQkFDdkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztpQkFDN0IsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUVoQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUN4RCxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRW5ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQjtRQUNaLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUM7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDdEQ7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFTLFNBQWM7WUFDMUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ2IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ2IsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMxQztRQUVELElBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFTLFNBQWM7WUFDM0MsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxpQkFBaUI7UUFDakMsb0RBQW9EO1FBQ3BELEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzVCLElBQUcsaUJBQWlCLEtBQUssSUFBSSxFQUFFO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUcsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNYLDhEQUE4RDtZQUM5RCxvQkFBb0I7WUFDcEIsT0FBTztTQUNWO1FBQ0Qsa0VBQWtFO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxJQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNoQjthQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDN0IsaURBQWlEO1lBQ2pELE9BQU87U0FDVjthQUFNO1lBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDYixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDYixJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQzNDO1lBQ0QseURBQXlEO1lBQ3pELDRCQUE0QjtZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVMsU0FBYztnQkFDM0MsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFLO1FBQ1gsS0FBSSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDM0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUMxQztJQUNMLENBQUM7Q0FNSjtBQTVKRCxzQ0E0SkMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-scale\"));\nconst Scale_1 = require(\"./Scale\");\nconst colurutils = __importStar(require(\"./ColorUtils\"));\nclass OrdinalColorScale extends Scale_1.Scale {\n render() {\n this.scale = d3.scaleOrdinal();\n this.scale.domain(this.model.domain);\n this.create_event_listeners();\n this.listenTo(this.model, \"domain_changed\", this.model_domain_changed);\n this.model.on_some_change([\"colors\", \"scheme\"], this.colors_changed, this);\n this.set_range();\n }\n set_range() {\n if (this.model.get(\"colors\").length > 0) {\n this.scale.range(colurutils.cycle_colors(this.model.get(\"colors\"), this.scale.domain().length));\n }\n else {\n this.scale.range(colurutils.get_ordinal_scale_range(this.model.get(\"scheme\"), this.scale.domain().length));\n }\n this.trigger(\"color_scale_range_changed\");\n }\n model_domain_changed() {\n super.model_domain_changed();\n this.set_range();\n }\n colors_changed() {\n this.set_range();\n }\n}\nexports.OrdinalColorScale = OrdinalColorScale;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JkaW5hbENvbG9yU2NhbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvT3JkaW5hbENvbG9yU2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QixrREFBa0Q7QUFDbEQsbUNBQWdDO0FBQ2hDLHlEQUEyQztBQUUzQyxNQUFhLGlCQUFrQixTQUFRLGFBQUs7SUFFeEMsTUFBTTtRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ25HO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzlHO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQTVCRCw4Q0E0QkMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"));\nconst _ = __importStar(require(\"underscore\"));\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass BoxplotModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"BoxplotModel\", _view_name: \"Boxplot\", x: [], y: [], scales_metadata: {\n x: { orientation: \"horizontal\", dimension: \"x\" },\n y: { orientation: \"vertical\", dimension: \"y\" }\n }, stroke: null, box_fill_color: \"dodgerblue\", outlier_fill_color: \"gray\", opacities: [], box_width: null, auto_detect_outliers: true });\n }\n initialize() {\n super.initialize.apply(this, arguments);\n this.on_some_change([\"x\", \"y\"], this.update_data, this);\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.update_data();\n this.update_domains();\n }\n update_data() {\n let x_data = this.get(\"x\");\n let y_data = this.get(\"y\");\n y_data.forEach(function (elm) {\n elm.sort(function (a, b) {\n return a - b;\n });\n });\n if (x_data.length > y_data.length) {\n x_data = x_data.slice(0, y_data.length);\n }\n else if (x_data.length < y_data.length) {\n y_data = y_data.slice(0, x_data.length);\n }\n this.mark_data = _.zip(x_data, y_data);\n this.update_domains();\n this.trigger(\"data_updated\");\n }\n update_domains() {\n // color scale needs an issue in DateScaleModel to be fixed. It\n // should be moved here as soon as that is fixed.\n const scales = this.get(\"scales\");\n const x_scale = scales.x;\n const y_scale = scales.y;\n if (!this.get(\"preserve_domain\").x && this.mark_data) {\n x_scale.compute_and_set_domain(this.mark_data.map(function (elem) {\n return elem[0];\n }), this.model_id + \"_x\");\n }\n else {\n x_scale.del_domain([], this.model_id + \"_x\");\n }\n if (!this.get(\"preserve_domain\").y && this.mark_data) {\n //The values are sorted, so we are using that to calculate the min/max\n const min = d3.min(this.mark_data.map(function (d) {\n return d[1][0];\n }));\n const max = d3.max(this.mark_data.map(function (d) {\n const values = d[1];\n return values[values.length - 1];\n }));\n y_scale.set_domain([min, max], this.model_id + \"_y\");\n }\n else {\n y_scale.del_domain([], this.model_id + \"_y\");\n }\n }\n}\nBoxplotModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { x: serialize.array_or_json, y: serialize.array_or_json });\nexports.BoxplotModel = BoxplotModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm94cGxvdE1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0JveHBsb3RNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLGtEQUFrRDtBQUNsRCw4Q0FBZ0M7QUFDaEMsMkNBQXdDO0FBQ3hDLHVEQUF5QztBQUV6QyxNQUFhLFlBQWEsU0FBUSxxQkFBUztJQUV2QyxRQUFRO1FBQ0oseUJBQVcscUJBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3JDLFdBQVcsRUFBRSxjQUFjLEVBQzNCLFVBQVUsRUFBRSxTQUFTLEVBQ3JCLENBQUMsRUFBRSxFQUFFLEVBQ0wsQ0FBQyxFQUFFLEVBQUUsRUFDTCxlQUFlLEVBQUU7Z0JBQ2IsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNoRCxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7YUFDakQsRUFDRCxNQUFNLEVBQUUsSUFBSSxFQUNaLGNBQWMsRUFBRSxZQUFZLEVBQzVCLGtCQUFrQixFQUFFLE1BQU0sRUFDMUIsU0FBUyxFQUFFLEVBQUUsRUFDYixTQUFTLEVBQUUsSUFBSSxFQUNmLG9CQUFvQixFQUFFLElBQUksSUFDNUI7SUFDTixDQUFDO0lBRUQsVUFBVTtRQUNOLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-scale\"));\nconst Scale_1 = require(\"./Scale\");\nconst _ = __importStar(require(\"underscore\"));\nclass OrdinalScale extends Scale_1.Scale {\n render() {\n this.scale = d3.scaleBand();\n this.scale.domain(this.model.domain);\n this.offset = 0;\n this.create_event_listeners();\n }\n set_range(range, padding) {\n padding = (padding === undefined) ? 0 : padding;\n this.scale.range(range);\n this.scale.paddingInner(padding);\n this.scale.paddingOuter(padding / 2.0);\n this.offset = (this.scale.domain().length === 0) ? 0 : this.scale.bandwidth() / 2.0;\n }\n expand_domain(old_range, new_range) {\n // If you have a current range and then a new range and want to\n // expand the domain to expand to the new range but keep it\n // consistent with the previous one, this is the function you use.\n // I am trying to expand the ordinal scale by setting an\n // appropriate value for the outer padding of the ordinal scale so\n // that the starting point of each of the bins match. once that\n // happens, the labels are placed at the center of the bins\n const unpadded_scale = this.scale.copy();\n unpadded_scale.range(old_range).paddingInner(0).paddingOuter(0);\n const outer_padding = (unpadded_scale.range().length > 0) ?\n Math.abs((new_range[1] - old_range[1]) / unpadded_scale.bandwidth()) : 0;\n this.scale.range(new_range);\n this.scale.paddingInner(0.0);\n this.scale.paddingOuter(outer_padding);\n }\n invert(pixel) {\n // returns the element in the domain which is closest to pixel\n // value passed. If the pixel is outside the range of the scale,\n const that = this;\n const domain = this.scale.domain();\n const pixel_vals = domain.map(function (d) {\n return that.scale(d) + that.scale.bandwidth() / 2;\n });\n const abs_diff = pixel_vals.map(function (d) {\n return Math.abs(pixel - d);\n });\n return domain[abs_diff.indexOf(d3.min(abs_diff))];\n }\n invert_range(pixels) {\n //return all the indices between a range\n //pixels should be a non-decreasing two element array\n const that = this;\n const domain = this.scale.domain();\n const pixel_vals = domain.map(function (d) {\n return that.scale(d) + that.scale.bandwidth() / 2;\n });\n const indices = _.range(pixel_vals.length);\n const filtered_ind = indices.filter(function (ind) {\n return (pixel_vals[ind] >= pixels[0] &&\n pixel_vals[ind] <= pixels[1]);\n });\n return filtered_ind.map(function (ind) { return domain[ind]; });\n }\n}\nexports.OrdinalScale = OrdinalScale;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JkaW5hbFNjYWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL09yZGluYWxTY2FsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLGtEQUFrRDtBQUNsRCxtQ0FBZ0M7QUFDaEMsOENBQWdDO0FBRWhDLE1BQWEsWUFBYSxTQUFRLGFBQUs7SUFFbkMsTUFBTTtRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTztRQUNwQixPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDeEYsQ0FBQztJQUVELGFBQWEs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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-selection\"));\nconst ScatterBase_1 = require(\"./ScatterBase\");\nclass Label extends ScatterBase_1.ScatterBase {\n create_listeners() {\n super.create_listeners();\n this.model.on_some_change([\"font_weight\", \"default_size\", \"colors\",\n \"align\", \"font_unit\"], this.update_style, this);\n this.model.on_some_change([\"x\", \"y\", \"x_offset\", \"y_offset\",\n \"rotate_angle\"], this.update_position, this);\n }\n update_default_opacities(animate) {\n if (!this.model.dirty) {\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n // update opacity scale range?\n const that = this;\n this.d3el.selectAll(\".label\")\n .transition(\"update_default_opacities\")\n .duration(animation_duration)\n .style(\"opacity\", function (d, i) {\n return that.get_element_opacity(d, i);\n });\n }\n }\n update_default_size(animate) {\n this.compute_view_padding();\n // update size scale range?\n if (!this.model.dirty) {\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n const that = this;\n this.d3el.selectAll(\".label\")\n .transition(\"update_default_size\")\n .duration(animation_duration)\n .style(\"font-size\", function (d, i) {\n return that.get_element_size(d);\n });\n }\n }\n relayout() {\n this.set_ranges();\n this.update_position();\n }\n draw_elements(animate, elements_added) {\n elements_added.append(\"text\")\n .classed(\"label element\", true);\n this.update_text();\n this.update_style();\n this.update_default_opacities(true);\n }\n update_text() {\n this.d3el.selectAll(\".object_grp\")\n .select(\".label\")\n .text(function (d) { return d.text; });\n }\n get_element_size(data) {\n const size_scale = this.scales.size;\n const unit = this.model.get(\"font_unit\");\n if (size_scale && data.size !== undefined) {\n return size_scale.scale(data.size) + unit;\n }\n return this.model.get(\"default_size\") + unit;\n }\n get_element_rotation(data) {\n const rotation_scale = this.scales.rotation;\n return (!rotation_scale || !data.rotation) ? \"rotate(\" + this.model.get(\"rotate_angle\") + \")\" :\n \"rotate(\" + rotation_scale.scale(data.rotation) + \")\";\n }\n update_position() {\n const that = this;\n const x_scale = this.x_scale;\n const y_scale = this.y_scale;\n const x_offset = this.model.get(\"x_offset\"), y_offset = this.model.get(\"y_offset\");\n this.d3el.selectAll(\".object_grp\")\n .attr(\"transform\", function (d) {\n return \"translate(\" + (x_scale.scale(d.x) + x_scale.offset + x_offset) +\n \",\" + (y_scale.scale(d.y) + y_scale.offset + y_offset) + \")\" +\n that.get_element_rotation(d);\n });\n }\n update_style() {\n const that = this;\n this.d3el.selectAll(\".object_grp\")\n .select(\"text\")\n .attr(\"dominant-baseline\", \"central\")\n .style(\"font-size\", function (d, i) {\n return that.get_element_size(d);\n })\n .style(\"font-weight\", this.model.get(\"font_weight\"))\n .style(\"text-anchor\", this.model.get(\"align\"));\n this.d3el.selectAll(\".label\")\n .style(\"fill\", function (d, i) {\n return that.get_element_color(d, i);\n });\n }\n color_scale_updated(animate) {\n const that = this;\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n this.d3el.selectAll(\".object_grp\")\n .select(\"text\")\n .transition(\"color_scale_updated\")\n .duration(animation_duration)\n .style(\"fill\", function (d, i) {\n return that.get_element_color(d, i);\n });\n }\n set_default_style(indices) {\n // For all the elements with index in the list indices, the default\n // style is applied.\n if (!indices || indices.length === 0) {\n return;\n }\n const elements = this.d3el.selectAll(\".element\").filter(function (data, index) {\n return indices.indexOf(index) !== -1;\n });\n const that = this;\n elements\n .style(\"font-size\", function (d, i) {\n return that.get_element_size(d);\n })\n .style(\"font-weight\", this.model.get(\"font_weight\"))\n .style(\"text-anchor\", this.model.get(\"align\"))\n .style(\"fill\", function (d, i) {\n return that.get_element_color(d, i);\n });\n }\n set_drag_style(d, i, dragged_node) {\n const dragged_size = (this.model.get(\"drag_size\") *\n this.model.get(\"default_size\")) + this.model.get(\"font_unit\");\n d3.select(dragged_node)\n .select(\"text\")\n .classed(\"drag_label\", true)\n .transition(\"set_drag_style\")\n .style(\"font-size\", (dragged_size));\n }\n reset_drag_style(d, i, dragged_node) {\n d3.select(dragged_node)\n .select(\"text\")\n .classed(\"drag_label\", false)\n .transition(\"reset_drag_style\")\n .style(\"font-size\", this.get_element_size(d));\n }\n // TODO: put this here just because it is an abstract method on the base\n // class.\n update_default_skew() { }\n}\nexports.Label = Label;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGFiZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTGFiZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QixzREFBc0Q7QUFDdEQsK0NBQTBDO0FBRzFDLE1BQWEsS0FBTSxTQUFRLHlCQUFXO0lBRWxDLGdCQUFnQjtRQUNaLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxRQUFRO1lBQ3ZDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUNoQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUFPO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNuQixNQUFNLGtCQUFrQixHQUFHLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFOUYsOEJBQThCO1lBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7aUJBQ3hCLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDdEMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO2lCQUM1QixLQUFLLENBQUMsU0FBUyxFQUFFLFVBQVMsQ0FBQyxF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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\nconst ScatterBaseModel_1 = require(\"./ScatterBaseModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass LabelModel extends ScatterBaseModel_1.ScatterBaseModel {\n defaults() {\n return Object.assign({}, ScatterBaseModel_1.ScatterBaseModel.prototype.defaults(), { _model_name: \"LabelModel\", _view_name: \"Label\", x_offset: 0, y_offset: 0, colors: d3.scaleOrdinal(d3.schemeCategory10).range(), rotate_angle: 0.0, text: null, default_size: 16.0, drag_size: 1.0, font_unit: \"px\", font_weight: \"bold\", align: \"start\" });\n }\n initialize(attributes, options) {\n // TODO: Normally, color, opacity and size should not require a redraw\n super.initialize(attributes, options);\n this.on(\"change:text\", this.update_data, this);\n }\n update_mark_data() {\n super.update_mark_data();\n const text = this.get(\"text\");\n this.mark_data.forEach(function (d, i) { d.text = text[i]; });\n }\n update_unique_ids() {\n this.mark_data.forEach(function (data, index) {\n data.unique_id = \"Label\" + index;\n });\n }\n}\nLabelModel.serializers = Object.assign({}, ScatterBaseModel_1.ScatterBaseModel.serializers, { text: serialize.array_or_json });\nexports.LabelModel = LabelModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGFiZWxNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9MYWJlbE1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIseURBQW9EO0FBQ3BELHVEQUF5QztBQUV6QyxNQUFhLFVBQVcsU0FBUSxtQ0FBZ0I7SUFFNUMsUUFBUTtRQUNKLHlCQUFXLG1DQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFDNUMsV0FBVyxFQUFFLFlBQVksRUFDekIsVUFBVSxFQUFFLE9BQU8sRUFFbkIsUUFBUSxFQUFFLENBQUMsRUFDWCxRQUFRLEVBQUUsQ0FBQyxFQUNYLE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUNwRCxZQUFZLEVBQUUsR0FBRyxFQUNqQixJQUFJLEVBQUUsSUFBSSxFQUNWLFlBQVksRUFBRSxJQUFJLEVBQ2xCLFNBQVMsRUFBRSxHQUFHLEVBQ2QsU0FBUyxFQUFFLElBQUksRUFDZixXQUFXLEVBQUUsTUFBTSxFQUNuQixLQUFLLEVBQUUsT0FBTyxJQUNoQjtJQUNOLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDMUIsc0VBQXNFO1FBQ3RFLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGdCQUFnQjtRQUNaLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBUyxDQUFDLEVBQUUsQ0FBQyxJQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVMsSUFBSSxFQUFFLEtBQUs7WUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7QUFFTSxzQkFBVyxxQkFDWCxtQ0FBZ0IsQ0FBQyxXQUFXLElBQy9CLElBQUksRUFBRSxTQUFTLENBQUMsYUFBYSxJQUNoQztBQTFDTCxnQ0EyQ0MifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst OrdinalScaleModel_1 = require(\"./OrdinalScaleModel\");\nclass OrdinalColorScaleModel extends OrdinalScaleModel_1.OrdinalScaleModel {\n defaults() {\n return Object.assign({}, OrdinalScaleModel_1.OrdinalScaleModel.prototype.defaults(), { _model_name: \"OrdinalColorScaleModel\", _view_name: \"OrdinalColorScale\", domain: [] });\n }\n}\nexports.OrdinalColorScaleModel = OrdinalColorScaleModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JkaW5hbENvbG9yU2NhbGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9PcmRpbmFsQ29sb3JTY2FsZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUVILDJEQUF3RDtBQUV4RCxNQUFhLHNCQUF1QixTQUFRLHFDQUFpQjtJQUV6RCxRQUFRO1FBQ0oseUJBQVcscUNBQWlCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUM3QyxXQUFXLEVBQUUsd0JBQXdCLEVBQ3JDLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsTUFBTSxFQUFFLEVBQUUsSUFDWjtJQUNOLENBQUM7Q0FDSjtBQVRELHdEQVNDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-brush\"), require(\"d3-selection\"));\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst _ = __importStar(require(\"underscore\"));\nconst selector = __importStar(require(\"./Selector\"));\nconst utils = __importStar(require(\"./utils\"));\nconst sel_utils = __importStar(require(\"./selector_utils\"));\n// TODO: examine refactoring the two abstract base classes belowing using a more\n// up-to-date mixin pattern. See\n// https://www.bryntum.com/blog/the-mixin-pattern-in-typescript-all-you-need-to-know/\n// and\n// https://github.com/Microsoft/TypeScript/issues/9110#issuecomment-239235909\n// For now, since it's not clear what mixin approach we should use with abstract\n// classes, we provide two children classes with the same functionality. If you\n// change one, make sure to change the other correspondingly.\nclass BrushMixinXYSelector extends selector.BaseXYSelector {\n brush_render() {\n this.brushing = false;\n }\n color_change() {\n if (this.model.get(\"color\") !== null) {\n this.brushsel.select(\".selection\").style(\"fill\", this.model.get(\"color\"));\n }\n }\n brush_start() {\n this.model.set(\"brushing\", true);\n this.touch();\n this.brushing = true;\n }\n brush_move() {\n this.convert_and_save();\n }\n brush_end() {\n this.model.set(\"brushing\", false);\n this.convert_and_save();\n this.brushing = false;\n }\n adjust_rectangle() {\n if (this.model.get(\"orientation\") == \"vertical\") {\n this.d3el.selectAll(\"rect\")\n .attr(\"x\", 0)\n .attr(\"width\", this.width);\n }\n else {\n this.d3el.selectAll(\"rect\")\n .attr(\"y\", 0)\n .attr(\"height\", this.height);\n }\n }\n update_mark_selected(extent_x, extent_y) {\n if (extent_x === undefined || extent_x.length === 0) {\n // Reset all the selected in marks\n _.each(this.mark_views, function (mark_view) {\n return mark_view.selector_changed();\n });\n return;\n }\n let x, y;\n if (extent_y === undefined) {\n // 1d brush\n const orient = this.model.get(\"orientation\");\n x = (orient == \"vertical\") ? [] : extent_x,\n y = (orient == \"vertical\") ? extent_x : [];\n }\n else {\n // 2d brush\n x = extent_x, y = extent_y;\n }\n const point_selector = function (p) {\n return sel_utils.point_in_rectangle(p, x, y);\n };\n const rect_selector = function (xy) {\n return sel_utils.rect_inter_rect(xy[0], xy[1], x, y);\n };\n _.each(this.mark_views, function (mark_view) {\n mark_view.selector_changed(point_selector, rect_selector);\n }, this);\n }\n}\nclass BrushMixinXSelector extends selector.BaseXSelector {\n brush_render() {\n this.brushing = false;\n }\n color_change() {\n if (this.model.get(\"color\") !== null) {\n this.brushsel.select(\".selection\").style(\"fill\", this.model.get(\"color\"));\n }\n }\n brush_start() {\n this.model.set(\"brushing\", true);\n this.touch();\n this.brushing = true;\n }\n brush_move() {\n this.convert_and_save();\n }\n brush_end() {\n this.model.set(\"brushing\", false);\n this.convert_and_save();\n this.brushing = false;\n }\n adjust_rectangle() {\n if (this.model.get(\"orientation\") == \"vertical\") {\n this.d3el.selectAll(\"rect\")\n .attr(\"x\", 0)\n .attr(\"width\", this.width);\n }\n else {\n this.d3el.selectAll(\"rect\")\n .attr(\"y\", 0)\n .attr(\"height\", this.height);\n }\n }\n update_mark_selected(extent_x, extent_y) {\n if (extent_x === undefined || extent_x.length === 0) {\n // Reset all the selected in marks\n _.each(this.mark_views, function (mark_view) {\n return mark_view.selector_changed();\n });\n return;\n }\n let x, y;\n if (extent_y === undefined) {\n // 1d brush\n const orient = this.model.get(\"orientation\");\n x = (orient == \"vertical\") ? [] : extent_x,\n y = (orient == \"vertical\") ? extent_x : [];\n }\n else {\n // 2d brush\n x = extent_x, y = extent_y;\n }\n if (x.length)\n x.sort(function (a, b) { return a - b; });\n if (y.length)\n y.sort(function (a, b) { return a - b; });\n const point_selector = function (xar, yar) {\n if (typeof yar == \"undefined\") { // the 'old' method for backwards compatibility\n const p = xar;\n return sel_utils.point_in_rectangle(p, x, y);\n }\n const N = Math.min(xar.length, yar.length);\n const mask = new Uint8Array(N);\n // for performance we keep the if statement out of the loop\n if (x.length && y.length) {\n for (let i = 0; i < N; i++) {\n mask[i] = (x[0] <= xar[i] && xar[i] <= x[1] && y[0] <= yar[i] && yar[i] <= y[1]) ? 1 : 0;\n }\n return mask;\n }\n else if (x.length) {\n for (let i = 0; i < N; i++) {\n mask[i] = (x[0] <= xar[i] && xar[i] <= x[1]) ? 1 : 0;\n }\n }\n else { // (y.length)\n for (let i = 0; i < N; i++) {\n mask[i] = (y[0] <= yar[i] && yar[i] <= y[1]) ? 1 : 0;\n }\n }\n ;\n return mask;\n };\n const rect_selector = function (xy) {\n return sel_utils.rect_inter_rect(xy[0], xy[1], x, y);\n };\n _.each(this.mark_views, function (mark_view) {\n mark_view.selector_changed(point_selector, rect_selector);\n }, this);\n }\n}\nclass BrushSelector extends BrushMixinXYSelector {\n render() {\n super.render.apply(this);\n this.brush_render();\n const that = this;\n const scale_creation_promise = this.create_scales();\n Promise.all([this.mark_views_promise, scale_creation_promise]).then(function () {\n that.brush = d3.brush()\n .on(\"start\", _.bind(that.brush_start, that))\n .on(\"brush\", _.bind(that.brush_move, that))\n .on(\"end\", _.bind(that.brush_end, that));\n that.brush.extent([[0, 0], [that.width, that.height]]);\n that.d3el.attr(\"class\", \"selector brushintsel\");\n that.brushsel = that.d3el.call(that.brush);\n that.adjust_rectangle();\n that.color_change();\n that.create_listeners();\n that.selected_changed();\n });\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:color\", this.color_change);\n // Move these to BaseXYSelector\n this.listenTo(this.model, \"change:selected_x\", this.selected_changed);\n this.listenTo(this.model, \"change:selected_y\", this.selected_changed);\n }\n empty_selection() {\n this.update_mark_selected();\n this.model.set(\"selected_x\", null);\n this.model.set(\"selected_y\", null);\n this.touch();\n }\n convert_and_save() {\n const e = d3GetEvent();\n if (!e.sourceEvent)\n return;\n if (!e.selection) {\n this.empty_selection();\n }\n else {\n const d0 = e.selection;\n var pixel_extent_x = [d0[0][0], d0[1][0]];\n var pixel_extent_y = [d0[1][1], d0[0][1]];\n // d3 does not always (!) give the selection in [[xmin, xmax], [ymin, ymax]] order\n // so we sort it to be sure\n var sortFunction = (a, b) => a - b;\n pixel_extent_x.sort(sortFunction);\n pixel_extent_y.sort(sortFunction);\n const extent_x = pixel_extent_x.map(this.x_scale.invert.bind(this.x_scale)).sort((a, b) => a - b);\n const extent_y = pixel_extent_y.map(this.y_scale.invert.bind(this.y_scale)).sort((a, b) => a - b);\n this.update_mark_selected(pixel_extent_x, pixel_extent_y);\n this.set_selected(\"selected_x\", extent_x);\n this.set_selected(\"selected_y\", extent_y);\n this.touch();\n }\n }\n selected_changed() {\n if (this.brushing) {\n return;\n }\n //reposition the interval selector and set the selected attribute.\n const selected_x = this.model.get(\"selected_x\") || [], selected_y = this.model.get(\"selected_y\") || [];\n if (selected_x.length === 0 || selected_y.length === 0) {\n this.update_mark_selected();\n }\n else if (selected_x.length != 2 || selected_y.length != 2) {\n // invalid value for selected. Ignoring the value\n return;\n }\n else {\n const extent = [[selected_x[0], selected_y[0]],\n [selected_x[1], selected_y[1]]];\n this.brush.extent(extent);\n const pixel_extent_x = selected_x.map(this.x_scale.scale).sort(function (a, b) { return a - b; });\n const pixel_extent_y = selected_y.map(this.y_scale.scale).sort(function (a, b) { return a - b; });\n this.update_mark_selected(pixel_extent_x, pixel_extent_y);\n }\n }\n relayout() {\n super.relayout();\n this.d3el.select(\".background\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height);\n this.set_x_range([this.x_scale]);\n this.set_y_range([this.y_scale]);\n this.brush.extent([[0, 0], [this.width, this.height]]);\n if (this.model.get(\"selected_x\") && this.model.get(\"selected_y\")) {\n const range_x = this.model.get(\"selected_x\").map(this.x_scale.scale).sort(function (a, b) { return a - b; });\n const range_y = this.model.get(\"selected_y\").map(this.y_scale.scale).sort(function (a, b) { return a - b; });\n this.brush.move(this.d3el, [[range_x[0], range_y[0]], [range_x[1], range_y[1]]]);\n this.brushsel = this.d3el.call(this.brush);\n }\n }\n // TODO: check that we've properly overridden the mixin.\n adjust_rectangle() {\n }\n reset() { }\n}\nexports.BrushSelector = BrushSelector;\nclass BrushIntervalSelector extends BrushMixinXSelector {\n render() {\n super.render();\n this.brush_render();\n const that = this;\n const scale_creation_promise = this.create_scales();\n Promise.all([this.mark_views_promise, scale_creation_promise]).then(function () {\n that.brush = (that.model.get(\"orientation\") == \"vertical\" ? d3.brushY() : d3.brushX())\n .on(\"start\", _.bind(that.brush_start, that))\n .on(\"brush\", _.bind(that.brush_move, that))\n .on(\"end\", _.bind(that.brush_end, that));\n that.brush.extent([[0, 0], [that.width, that.height]]);\n that.d3el.attr(\"class\", \"selector brushintsel\");\n that.brushsel = that.d3el.call(that.brush);\n that.adjust_rectangle();\n that.color_change();\n that.create_listeners();\n that.selected_changed();\n });\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:color\", this.color_change);\n }\n empty_selection() {\n this.update_mark_selected();\n this.model.set(\"selected\", new Uint32Array([]));\n this.touch();\n }\n convert_and_save() {\n const e = d3GetEvent();\n if (!e.sourceEvent)\n return;\n if (!e.selection) {\n this.empty_selection();\n }\n else {\n const pixel_extent = e.selection;\n const extent = pixel_extent.map(this.scale.invert.bind(this.scale)).sort((a, b) => a - b);\n this.update_mark_selected(pixel_extent);\n this.set_selected(\"selected\", extent);\n this.touch();\n }\n }\n update_scale_domain(ignore_gui_update) {\n // Call the base class function to update the scale.\n super.update_scale_domain();\n if (ignore_gui_update !== true) {\n this.selected_changed();\n }\n }\n selected_changed() {\n if (this.brushing) {\n return;\n }\n //reposition the interval selector and set the selected attribute.\n const selected = this.model.get(\"selected\") || [];\n if (selected.length === 0) {\n this.update_mark_selected();\n }\n else if (selected.length != 2) {\n // invalid value for selected. Ignoring the value\n return;\n }\n else {\n const extent = [selected[0], selected[1]];\n this.brush.extent(extent);\n const pixel_extent = extent.map(this.scale.scale).sort((a, b) => a - b);\n this.update_mark_selected(pixel_extent);\n }\n }\n relayout() {\n super.relayout();\n this.adjust_rectangle();\n this.d3el.select(\".background\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height);\n this.set_range([this.scale]);\n this.brush.extent([[0, 0], [this.width, this.height]]);\n if (this.model.get(\"selected\")) {\n const range = this.model.get(\"selected\").map(this.scale.scale).sort(function (a, b) { return a - b; });\n this.brush.move(this.d3el, range);\n this.brushsel = this.d3el.call(this.brush);\n }\n }\n reset() { }\n}\nexports.BrushIntervalSelector = BrushIntervalSelector;\nfunction add_remove_classes(selection, add_classes, remove_classes) {\n //adds the classes present in add_classes and removes the classes in\n //the list remove_classes\n //selection attribute should be a d3-selection\n if (remove_classes) {\n remove_classes.forEach(function (r_class) {\n selection.classed(r_class, false);\n });\n }\n if (add_classes) {\n add_classes.forEach(function (a_class) {\n selection.classed(a_class, true);\n });\n }\n}\n;\nclass MultiSelector extends BrushMixinXSelector {\n render() {\n super.render.apply(this);\n const that = this;\n this.names = this.model.get(\"names\");\n this.curr_index = 0;\n const scale_creation_promise = this.create_scales();\n Promise.all([this.mark_views_promise, scale_creation_promise]).then(function () {\n that.d3el.attr(\"class\", \"multiselector\");\n that.d3el.attr(\"width\", that.width);\n that.d3el.attr(\"height\", that.height);\n that.create_brush();\n that.selecting_brush = false;\n that.create_listeners();\n });\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:names\", this.labels_change);\n this.listenTo(this.model, \"change:color\", this.color_change);\n }\n labels_change(model, value) {\n const prev_names = model.previous(\"names\");\n this.names = value;\n const data = _.range(this.curr_index + 1);\n const that = this;\n const selected = utils.deepCopy(this.model.get(\"selected\"));\n //TODO: Use do diff?\n data.forEach(function (elem) {\n const label = that.get_label(elem);\n const prev_label = that.get_label(elem, prev_names);\n if (prev_label !== label) {\n that.d3el.select(\".brush_text_\" + elem).text(label);\n selected[label] = selected[prev_label];\n delete selected[prev_label];\n }\n });\n this.set_selected(\"_selected\", selected);\n this.touch();\n }\n create_brush() {\n // Function to add new brushes.\n const that = this;\n const index = this.curr_index;\n const vertical = (this.model.get(\"orientation\") == \"vertical\");\n const brush = (vertical ? d3.brushY() : d3.brushX())\n .on(\"start\", () => { this.brush_start(); })\n .on(\"brush\", () => { this.brush_move(index, this); })\n .on(\"end\", () => { this.brush_end(index, this); });\n brush.extent([[0, 0], [this.width, this.height]]);\n const new_brush_g = this.d3el.append(\"g\")\n .attr(\"class\", \"selector brushintsel active\");\n new_brush_g.append(\"text\")\n .text(this.get_label(this.curr_index))\n .attr(\"class\", \"brush_text_\" + this.curr_index)\n .style(\"text-anchor\", \"middle\")\n .style(\"stroke\", \"yellow\")\n .style(\"font-size\", \"16px\")\n .style(\"display\", \"none\");\n if (this.model.get(\"orientation\") == \"vertical\") {\n new_brush_g.select(\"text\").attr(\"x\", 30);\n }\n else {\n new_brush_g.select(\"text\").attr(\"y\", 30);\n }\n new_brush_g.call(brush);\n this.color_change();\n this.adjust_rectangle();\n const old_handler = new_brush_g.on(\"mousedown.brush\");\n new_brush_g.on(\"mousedown.brush\", function () {\n const accelKey = d3GetEvent().ctrlKey || d3GetEvent().metaKey;\n if (d3GetEvent().shiftKey && accelKey) {\n that.reset();\n }\n else if (accelKey) {\n add_remove_classes(d3.select(this), [\"inactive\"], [\"active\"]);\n that.create_brush();\n }\n else if (d3GetEvent().shiftKey && that.selecting_brush === false) {\n add_remove_classes(that.d3el.selectAll(\".selector\"), [\"visible\"], [\"active\", \"inactive\"]);\n that.selecting_brush = true;\n }\n else {\n add_remove_classes(that.d3el.selectAll(\".selector\"), [\"inactive\"], [\"visible\"]);\n add_remove_classes(d3.select(this), [\"active\"], [\"inactive\"]);\n old_handler.call(this);\n that.selecting_brush = false;\n }\n });\n this.curr_index = this.curr_index + 1;\n }\n get_label(index, arr) {\n //arr is optional. If you do not pass anything, this.names is\n //considered arr.\n if (arr === undefined || arr === null) {\n arr = this.names;\n }\n return (arr.length > index) ? arr[index] : index;\n }\n brush_start() {\n this.model.set(\"brushing\", true);\n this.touch();\n }\n brush_move(item, brush_g) {\n const sel = d3GetEvent().selection;\n const hide_names = !(this.model.get(\"show_names\"));\n d3.select(brush_g).select(\"text\")\n .style(\"display\", ((!sel || hide_names) ? \"none\" : \"inline\"));\n this.set_text_location(brush_g, sel);\n this.convert_and_save(sel, item);\n }\n brush_end(item, brush_g) {\n const sel = d3GetEvent().selection;\n this.model.set(\"brushing\", false);\n this.convert_and_save(sel, item);\n }\n set_text_location(brush_g, extent) {\n const vertical = (this.model.get(\"orientation\") == \"vertical\");\n const orient = vertical ? \"y\" : \"x\";\n const mid = (extent[0] + extent[1]) / 2;\n d3.select(brush_g).select(\"text\")\n .attr(orient, mid);\n }\n reset() {\n this.d3el.selectAll(\".selector\")\n .remove();\n this.model.set(\"_selected\", {});\n this.curr_index = 0;\n this.touch();\n this.create_brush();\n }\n convert_and_save(extent, item) {\n if (!extent) {\n this.update_mark_selected();\n this.model.set(\"_selected\", {});\n this.touch();\n }\n else {\n const selected = utils.deepCopy(this.model.get(\"_selected\"));\n selected[this.get_label(item)] = extent.map(this.scale.invert.bind(this.scale));\n this.update_mark_selected(extent);\n this.model.set(\"_selected\", selected);\n this.touch();\n }\n }\n // TODO: make a proper implementation\n selected_changed() { }\n color_change() {\n if (this.model.get(\"color\") !== null) {\n this.d3el.selectAll(\".selector\")\n .style(\"fill\", this.model.get(\"color\"));\n }\n }\n relayout() {\n super.relayout();\n this.adjust_rectangle();\n this.d3el.select(\".background\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height);\n this.set_range([this.scale]);\n }\n remove() {\n this.model.off(\"change:names\", null, this);\n super.remove();\n }\n}\nexports.MultiSelector = MultiSelector;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJ1c2hTZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9CcnVzaFNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsMkVBQTJFO0FBQzNFLE1BQU0sVUFBVSxHQUFHLGNBQVcsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSw4Q0FBZ0M7QUFDaEMscURBQXVDO0FBQ3ZDLCtDQUFpQztBQUNqQyw0REFBOEM7QUFFOUMsZ0ZBQWdGO0FBQ2hGLGdDQUFnQztBQUNoQyxxRkFBcUY7QUFDckYsTUFBTTtBQUNOLDZFQUE2RTtBQUU3RSxnRkFBZ0Y7QUFDaEYsK0VBQStFO0FBQy9FLDZEQUE2RDtBQUU3RCxNQUFlLG9CQUFxQixTQUFRLFFBQVEsQ0FBQyxjQUFjO0lBQy9ELFlBQVk7UUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUM3RTtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVO1FBQ04s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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-drag\"), require(\"d3-selection\"), require(\"d3-shape\"));\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst _ = __importStar(require(\"underscore\"));\nconst Selector_1 = require(\"./Selector\");\nconst sel_utils = __importStar(require(\"./selector_utils\"));\nclass LassoSelector extends Selector_1.BaseXYSelector {\n render() {\n super.render();\n const scale_creation_promise = this.create_scales();\n this.line = d3.line();\n this.all_vertices = {};\n this.lasso_counter = 0;\n const that = this;\n Promise.all([this.mark_views_promise, scale_creation_promise]).then(() => {\n // Warning: arrow functions actually breaks the drag\n const drag = d3.drag()\n .on(\"start\", function () { that.drag_start(); })\n .on(\"drag\", function () { that.drag_move(); })\n .on(\"end\", function () { that.drag_end(); });\n d3.select(window).on(\"keydown\", () => { this.keydown(); });\n that.d3el.attr(\"class\", \"lassoselector\");\n //container for mouse events\n that.background = that.d3el.append(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", that.width)\n .attr(\"height\", that.height)\n .attr(\"visibility\", \"hidden\")\n .attr(\"pointer-events\", \"all\")\n .style(\"cursor\", \"crosshair\")\n .call(drag);\n that.create_listeners();\n });\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:color\", this.change_color);\n }\n change_color(model, color) {\n if (color) {\n this.d3el.selectAll(\"path\").style(\"stroke\", color);\n }\n }\n create_new_lasso() {\n const lasso = this.d3el.append(\"path\")\n .attr(\"id\", \"l\" + (++this.lasso_counter))\n .on(\"click\", function () {\n //toggle the opacity of lassos\n const lasso = d3.select(this);\n lasso.classed(\"selected\", !lasso.classed(\"selected\"));\n });\n const color = this.model.get(\"color\");\n if (color) {\n lasso.style(\"stroke\", color);\n }\n }\n drag_start() {\n this.current_vertices = [];\n this.create_new_lasso();\n }\n drag_move() {\n this.current_vertices.push(d3.mouse(this.background.node()));\n this.d3el.select(\"#l\" + this.lasso_counter)\n .attr(\"d\", this.line(this.current_vertices));\n }\n drag_end() {\n const lasso_name = \"l\" + this.lasso_counter;\n // Close the lasso\n this.d3el.select(\"#\" + lasso_name)\n .attr(\"d\", this.line(this.current_vertices) + \"Z\");\n // Add the current vertices to the global lasso vertices\n this.all_vertices[lasso_name] = this.current_vertices;\n // Update selected for each mark\n this.update_mark_selected(this.all_vertices);\n }\n update_mark_selected(vertices) {\n if (vertices === undefined || vertices.length === 0) {\n // Reset all the selected in marks\n _.each(this.mark_views, function (mark_view) {\n return mark_view.selector_changed();\n });\n }\n const point_selector = function (p) {\n for (let l in vertices) {\n if (sel_utils.point_in_lasso(p, vertices[l])) {\n return true;\n }\n }\n return false;\n };\n const rect_selector = function (xy) {\n for (let l in vertices) {\n if (sel_utils.lasso_inter_rect(xy[0], xy[1], vertices[l])) {\n return true;\n }\n }\n return false;\n };\n _.each(this.mark_views, function (mark_view) {\n mark_view.selector_changed(point_selector, rect_selector);\n }, this);\n }\n relayout() {\n super.relayout();\n this.background.attr(\"width\", this.width).attr(\"height\", this.height);\n }\n keydown() {\n // delete key pressed\n if (d3GetEvent().keyCode === 46) {\n // Delete selected lassos\n const lassos_to_delete = this.d3el.selectAll(\".selected\");\n // Update the lasso vertices\n const vertices = this.all_vertices;\n lassos_to_delete.each(function () {\n const lasso_name = d3.select(this).attr(\"id\");\n delete vertices[lasso_name];\n });\n lassos_to_delete.remove();\n this.update_mark_selected(this.all_vertices);\n }\n }\n reset() {\n this.lasso_counter = 0;\n this.all_vertices = {};\n this.d3el.selectAll(\"path\").remove();\n this.update_mark_selected();\n }\n // TODO: this is here to provide an implementation of an abstract method\n // from the base class.\n selected_changed() { }\n}\nexports.LassoSelector = LassoSelector;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGFzc29TZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9MYXNzb1NlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsK0ZBQStGO0FBQy9GLE1BQU0sVUFBVSxHQUFHLGNBQVcsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSw4Q0FBZ0M7QUFDaEMseUNBQTBDO0FBQzFDLDREQUE4QztBQUU5QyxNQUFhLGFBQWMsU0FBUSx5QkFBYztJQUM3QyxNQUFNO1FBQ0YsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2YsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFFdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDckUsb0RBQW9EO1lBQ3BELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUU7aUJBQ2pCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsY0FBYSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQSxDQUFDLENBQUM7aUJBQzdDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsY0FBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQSxDQUFDLENBQUM7aUJBQzFDLEVBQUUsQ0FBQyxLQUFL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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-selection\"));\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst interaction = __importStar(require(\"./Interaction\"));\nconst _ = __importStar(require(\"underscore\"));\n// TODO avoid code duplication for 'x' and 'y'\nclass PanZoom extends interaction.Interaction {\n render() {\n super.render();\n const that = this;\n this.d3el\n .style(\"cursor\", \"move\")\n .on(\"mousedown\", function () { that.mousedown(); })\n .on(\"mousemove\", function () { that.mousemove(); })\n .on(\"mouseup\", function () { that.mouseup(); })\n .on(\"mousewheel\", function () { that.mousewheel(); })\n .on(\"DOMMouseScroll.zoom\", function () { that.mousewheel(); })\n .on(\"mousewheel.zoom\", null)\n .on(\"wheel.zoom\", null);\n this.active = false;\n this.update_scales();\n this.listenTo(this.model, \"change:scales\", this.update_scales);\n this.set_ranges();\n this.listenTo(this.parent, \"margin_updated\", this.set_ranges);\n }\n update_scales() {\n const scales = this.model.get(\"scales\");\n const that = this;\n this.scale_promises = widgets.resolvePromisesDict({\n \"x\": Promise.all((scales.x || []).map(function (model) {\n return that.create_child_view(model);\n })),\n \"y\": Promise.all((scales.y || []).map(function (model) {\n return that.create_child_view(model);\n })),\n });\n widgets.resolvePromisesDict(this.scale_promises)\n .then(_.bind(this.set_ranges, this));\n }\n set_ranges() {\n const that = this;\n let i;\n this.scale_promises.then(function (scale_views) {\n const xscale_views = scale_views.x;\n for (i = 0; i < xscale_views.length; i++) {\n xscale_views[i].set_range(that.parent.padded_range(\"x\", xscale_views[i].model));\n }\n const yscale_views = scale_views.y;\n for (i = 0; i < yscale_views.length; i++) {\n yscale_views[i].set_range(that.parent.padded_range(\"y\", yscale_views[i].model));\n }\n });\n }\n mousedown() {\n this._mousedown(d3.mouse(this.el));\n }\n _mousedown(mouse_pos) {\n const scales = this.model.get(\"scales\");\n this.active = true;\n this.d3el.style(\"cursor\", \"move\");\n this.previous_pos = mouse_pos.slice();\n // A copy of the original domains is required to avoid additional\n // drift when Paning.\n this.domains_in_order = {\n \"x\": (scales.x || []).map(function (s) {\n return s.get_domain_slice_in_order();\n }),\n \"y\": (scales.y || []).map(function (s) {\n return s.get_domain_slice_in_order();\n }),\n };\n }\n mouseup() {\n this.active = false;\n }\n mousemove() {\n this._mousemove(d3.mouse(this.el));\n }\n _mousemove(mouse_pos) {\n if (this.active && this.model.get(\"allow_pan\")) {\n // If memory is set to true, intermediate positions between the\n // last position of the mouse and the current one will be\n // interpolated.\n if (this.previous_pos === undefined) {\n this.previous_pos = mouse_pos;\n }\n const mouse_delta = {\n x: mouse_pos[0] - this.previous_pos[0],\n y: mouse_pos[1] - this.previous_pos[1],\n };\n return this.scale_promises.then((scale_views) => {\n [\"x\", \"y\"].forEach((dimension) => {\n scale_views[dimension].forEach((view, index) => {\n if (view.scale.invert) { // Categorical scales don't have an inversion.\n const scale = view.scale.copy().domain(this.domains_in_order[dimension][index]);\n // convert the initial domain to pixel coordinates\n const pixel_min = scale(this.domains_in_order[dimension][index][0]);\n const pixel_max = scale(this.domains_in_order[dimension][index][1]);\n // shift pixels, and convert to new domain\n const domain_min = scale.invert(pixel_min - mouse_delta[dimension]);\n const domain_max = scale.invert(pixel_max - mouse_delta[dimension]);\n this.set_scale_attribute(view.model, \"min\", domain_min);\n this.set_scale_attribute(view.model, \"max\", domain_max);\n view.touch();\n }\n });\n });\n });\n }\n }\n mousewheel() {\n if (this.model.get(\"allow_zoom\")) {\n d3GetEvent().preventDefault();\n // With Firefox, wheelDelta is undefined.\n const delta = d3GetEvent().wheelDelta || d3GetEvent().detail * (-40);\n const mouse_pos = d3.mouse(this.el);\n this._zoom(mouse_pos, delta);\n }\n }\n _zoom(mouse_pos, delta) {\n if (delta) {\n if (delta > 0) {\n this.d3el.style(\"cursor\", \"zoom-in\");\n }\n else {\n this.d3el.style(\"cursor\", \"zoom-out\");\n }\n const mouse = { x: mouse_pos[0], y: mouse_pos[1] };\n const factor = Math.exp(-delta * 0.001);\n return this.scale_promises.then((scale_views) => {\n [\"x\", \"y\"].forEach((dimension) => {\n scale_views[dimension].forEach((view, index) => {\n if (view.scale.invert) { // Categorical scales don't have an inversion.\n const scale = view.scale; //.copy().domain(this.domains_in_order[dimension][index]);\n // convert the initial domain to pixel coordinates\n let [domain_min, domain_max] = view.model.get_domain_slice_in_order();\n const pixel_min = scale(domain_min);\n const pixel_max = scale(domain_max);\n // take a weighted average between the mouse pos and the original pixel coordinate\n // and translate that back to the domain\n domain_min = scale.invert((1 - factor) * mouse[dimension] + factor * pixel_min);\n domain_max = scale.invert((1 - factor) * mouse[dimension] + factor * pixel_max);\n this.set_scale_attribute(view.model, \"min\", domain_min);\n this.set_scale_attribute(view.model, \"max\", domain_max);\n view.touch();\n }\n });\n });\n });\n }\n }\n set_scale_attribute(scale, attribute_name, value) {\n // The difference of two dates is an int. So we want to cast it to\n // a date when setting the attribute for the date scale\n if (scale.type == \"date\") {\n value = (value instanceof Date) ? value : new Date(value);\n //TODO: function for setting date can be made the same as for\n //other scale once the _pack_models is fixes\n scale.set_date_elem(attribute_name, value);\n }\n else {\n scale.set(attribute_name, value);\n }\n }\n}\nexports.PanZoom = PanZoom;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFuWm9vbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9QYW5ab29tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCwrREFBaUQ7QUFDakQsdUNBQXlCO0FBQ3pCLHNEQUFzRDtBQUN0RCxNQUFNLFVBQVUsR0FBRyxjQUFXLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0UsMkRBQTZDO0FBQzdDLDhDQUFnQztBQUVoQyw4Q0FBOEM7QUFFOUMsTUFBYSxPQUFRLFNBQVEsV0FBVyxDQUFDLFdBQVc7SUFFaEQsTUFBTTtRQUNGLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSTthQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQ3ZCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsY0FBYSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakQsRUFBRSxDQUFDLFdBQVcsRUFBRSxjQUFhLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRCxFQUFFLENBQUMsU0FBUyxFQUFFLGNBQWEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsY0FBYSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkQsRUFBRSxDQUFDLHFCQUFxQixFQUFFLGNBQWEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVELEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7YUFDM0IsRUFBRSxDQUFDLFlBQVksRUFB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-axis\"), require(\"d3-scale\"), require(\"d3-selection\"), require(\"d3-selection-multi\"));\nconst Axis_1 = require(\"./Axis\");\nclass ColorBar extends Axis_1.Axis {\n render() {\n this.parent = this.options.parent;\n this.vertical = this.model.get(\"orientation\") === \"vertical\";\n const scale_promise = this.set_scale(this.model.get(\"scale\"));\n this.side = this.model.get(\"side\");\n this.x_offset = 100;\n this.y_offset = 40;\n this.bar_height = 20;\n this.d3el.attr(\"class\", \"ColorBar\")\n .attr(\"display\", (this.model.get(\"visible\") ? \"inline\" : \"none\"))\n .attr(\"transform\", this.get_topg_transform());\n this.ordinal = false;\n this.num_ticks = this.model.get(\"num_ticks\");\n const that = this;\n return scale_promise.then(function () {\n that.create_listeners();\n that.tick_format = that.generate_tick_formatter();\n that.set_scales_range();\n that.append_axis();\n });\n }\n create_listeners() {\n this.listenTo(this.model, \"change:scale\", function (model, value) {\n this.update_scale(model.previous(\"scale\"), value);\n // TODO: rescale_axis does too many things. Decompose\n this.axis.scale(this.axis_scale.scale); // TODO: this is in redraw_axisline\n this.rescale_axis();\n });\n this.listenTo(this.model, \"change:tick_format\", this.tickformat_changed);\n this.axis_scale.on(\"domain_changed\", this.redraw_axisline, this);\n this.axis_scale.on(\"color_scale_range_changed\", this.redraw_axis, this);\n this.axis_scale.on(\"highlight_axis\", this.highlight, this);\n this.axis_scale.on(\"unhighlight_axis\", this.unhighlight, this);\n this.parent.on(\"margin_updated\", this.parent_margin_updated, this);\n this.listenTo(this.model, \"change:visible\", this.update_visibility);\n this.listenTo(this.model, \"change:label\", this.update_label);\n this.model.on_some_change([\"side\", \"orientation\"], this.update_display, this);\n }\n update_display() {\n this.side = this.model.get(\"side\");\n this.vertical = this.model.get(\"orientation\") === \"vertical\";\n if (this.vertical) {\n this.axis = this.side === \"right\" ? d3.axisRight(this.axis_scale.scale)\n : d3.axisLeft(this.axis_scale.scale);\n }\n else {\n this.axis = this.side === \"top\" ? d3.axisTop(this.axis_scale.scale)\n : d3.axisBottom(this.axis_scale.scale);\n }\n this.g_axisline.remove();\n this.g_axisline = this.d3el.select(\"#colorBarG\" + this.cid)\n .append(\"g\")\n .attr(\"class\", \"axis\");\n this.rescale_axis();\n this.d3el.select(\"#colorBarG\" + this.cid)\n .attr(\"transform\", this.get_colorbar_transform());\n this.d3el.select(\"#colorBarG\" + this.cid)\n .select(\".g-rect\")\n .attr(\"transform\", this.vertical ? \"rotate(-90)\" : \"\");\n this.redraw_axisline();\n }\n set_scale(model) {\n // Sets the child scale\n const that = this;\n if (this.axis_scale) {\n this.axis_scale.remove();\n }\n return this.create_child_view(model).then(function (view) {\n // Trigger the displayed event of the child view.\n that.displayed.then(function () {\n view.trigger(\"displayed\");\n });\n that.axis_scale = view;\n // TODO: eventually removes what follows\n if (that.axis_scale.model.type === \"date_color_linear\") {\n that.axis_line_scale = d3.scaleTime().nice();\n }\n else if (that.axis_scale.model.type === \"ordinal\") {\n that.axis_line_scale = d3.scaleBand();\n that.ordinal = true;\n }\n else {\n that.axis_line_scale = d3.scaleLinear();\n }\n });\n }\n append_axis() {\n // The label is allocated a space of 100px. If the label\n // occupies more than 100px then you are out of luck.\n if (this.model.get(\"label\") !== undefined && this.model.get(\"label\") !== null) {\n this.d3el.append(\"g\")\n .attr(\"transform\", this.get_label_transform())\n .attr(\"class\", \"axis label_g\")\n .append(\"text\")\n .append(\"tspan\")\n .attr(\"id\", \"text_elem\")\n .attr(\"dy\", \"0.5ex\")\n .attr(\"class\", \"axislabel\")\n .style(\"text-anchor\", this.vertical ? \"middle\" : \"end\")\n .text(this.model.get(\"label\"));\n }\n const colorBar = this.d3el.append(\"g\")\n .attr(\"id\", \"colorBarG\" + this.cid);\n this.draw_color_bar();\n this.set_axisline_domain();\n this.g_axisline = colorBar.append(\"g\")\n .attr(\"class\", \"axis\");\n if (this.vertical) {\n this.axis = this.side === \"right\" ? d3.axisRight(this.axis_scale.scale)\n : d3.axisLeft(this.axis_scale.scale);\n }\n else {\n this.axis = this.side === \"top\" ? d3.axisTop(this.axis_scale.scale)\n : d3.axisBottom(this.axis_scale.scale);\n }\n this.axis = this.axis.tickFormat(this.tick_format);\n this.redraw_axisline();\n }\n draw_color_bar() {\n const colorBar = this.d3el.select(\"#colorBarG\" + this.cid);\n colorBar.attr(\"transform\", this.get_colorbar_transform());\n const that = this;\n colorBar.selectAll(\".g-rect\")\n .remove();\n colorBar.selectAll(\".g-defs\")\n .remove();\n this.colors = this.axis_scale.scale.range();\n const colorSpacing = 100 / (this.colors.length - 1);\n if (this.ordinal) {\n const bar_width = this.get_color_bar_width() / this.colors.length;\n let rects = colorBar.append(\"g\")\n .attr(\"class\", \"g-rect axis\")\n .selectAll(\"rect\")\n .data(this.colors);\n rects = rects.enter()\n .append(\"rect\")\n .attr(\"y\", 0)\n .attr(\"height\", this.bar_height)\n .attr(\"width\", bar_width)\n .style(\"fill\", function (d) { return d; })\n .merge(rects);\n if (this.vertical) {\n rects.attr(\"x\", function (d, i) {\n return i * bar_width - (that.height - 2 * that.x_offset);\n });\n }\n else {\n rects.attr(\"x\", function (d, i) {\n return i * bar_width;\n });\n }\n }\n else {\n colorBar.append(\"g\")\n .attr(\"class\", \"g-defs\")\n .append(\"defs\")\n .append(\"linearGradient\")\n .attrs({\n id: \"colorBarGradient\" + this.cid,\n x1: \"0%\",\n y1: \"0%\",\n x2: \"100%\",\n y2: \"0%\"\n })\n .selectAll(\"stop\")\n .data(this.colors)\n .enter()\n .append(\"stop\")\n .attrs({\n \"offset\": function (d, i) {\n return colorSpacing * (i) + \"%\";\n },\n \"stop-color\": function (d, i) { return that.colors[i]; },\n \"stop-opacity\": 1\n });\n colorBar.append(\"g\")\n .attr(\"class\", \"g-rect axis\")\n .append(\"rect\")\n .attrs({\n \"width\": this.get_color_bar_width(),\n \"height\": this.bar_height,\n x: (this.vertical) ? -(this.height - 2 * this.x_offset) : 0,\n y: 0,\n \"stroke-width\": 1\n })\n .style(\"fill\", \"url(#colorBarGradient\" + this.cid + \")\");\n }\n if (this.vertical) {\n colorBar.select(\".g-rect\")\n .attr(\"transform\", \"rotate(-90)\");\n }\n }\n get_topg_transform() {\n const em = 12;\n if (this.vertical) {\n if (this.side === \"right\") {\n return \"translate(\" + String(this.get_basic_transform() + this.margin.right / 2 - this.bar_height) + \", 0)\";\n }\n return \"translate(\" + String(this.get_basic_transform() - this.margin.left / 2 + this.bar_height) + \", 0)\";\n }\n else {\n if (this.side === \"top\") {\n return \"translate(0, \" + String(this.get_basic_transform() - this.margin.top + this.bar_height + 2 * em) + \")\";\n }\n return \"translate(0, \" + String(this.get_basic_transform() + this.margin.bottom - this.bar_height - 2 * em) + \")\";\n }\n }\n get_label_transform() {\n if (this.vertical) {\n return \"translate(\" + ((this.side === \"right\") ?\n (this.bar_height / 2) : (-this.bar_height / 2)) + \", \" + (this.x_offset - 15) + \")\";\n }\n return \"translate(\" + (this.x_offset - 5) + \", \" + (this.bar_height / 2) + \")\";\n }\n get_colorbar_transform() {\n if (this.vertical) {\n return \"translate(0, \" + String(this.x_offset) + \")\";\n }\n return \"translate(\" + String(this.x_offset) + \", 0)\";\n }\n set_axisline_scale_range() {\n const range = (this.vertical) ?\n [this.height - 2 * this.x_offset, 0] : [0, this.width - 2 * this.x_offset];\n if (this.ordinal) {\n this.axis_line_scale.rangeRound(range).padding(0.05);\n }\n else {\n const mid = this.axis_scale.model.mid;\n if (mid === undefined || mid === null) {\n this.axis_line_scale.range(range);\n }\n else {\n this.axis_line_scale.range([range[0], (range[0] + range[1]) * 0.5, range[1]]);\n }\n }\n }\n set_scales_range() {\n //Setting the range of the color scale\n this.axis_scale.set_range();\n this.set_axisline_scale_range();\n }\n get_color_bar_width() {\n return (this.vertical) ? (this.height - (2 * this.x_offset)) : (this.width - 2 * this.x_offset);\n }\n update_label() {\n this.d3el.select(\"#text_elem\")\n .text(this.model.get(\"label\"));\n }\n rescale_axis() {\n // rescale the axis\n this.set_axisline_scale_range();\n // shifting the entire g of the color bar first.\n this.d3el.attr(\"transform\", this.get_topg_transform());\n const that = this;\n const bar_width = this.get_color_bar_width() / this.colors.length;\n if (this.ordinal) {\n const rectangles = this.d3el.select(\"#colorBarG\" + this.cid)\n .select(\".g-rect\")\n .selectAll(\"rect\")\n .attr(\"width\", bar_width);\n if (this.vertical) {\n rectangles.attr(\"x\", function (d, i) {\n return (i * bar_width) - (that.height - 2 * that.x_offset);\n });\n }\n else {\n rectangles.attr(\"x\", function (d, i) {\n return i * bar_width;\n });\n }\n }\n else {\n this.d3el.select(\"#colorBarG\" + this.cid)\n .select(\".g-rect\")\n .selectAll(\"rect\")\n .attr(\"width\", this.get_color_bar_width())\n .attr(\"x\", (this.vertical) ? -(this.height - 2 * this.x_offset) : 0);\n }\n if (this.model.get(\"label\") !== undefined && this.model.get(\"label\") !== null) {\n this.d3el.select(\".label_g\")\n .attr(\"transform\", this.get_label_transform())\n .select(\"#text_elem\")\n .style(\"text-anchor\", this.vertical ? \"middle\" : \"end\");\n }\n this.g_axisline.call(this.axis);\n }\n redraw_axisline() {\n if (this.axis) {\n this.set_axisline_domain();\n // We need to set the range of the axis line scale here again.\n // Only because, if the domain has changed from a two element\n // array to a three element one, the range of the axis has to\n // be changed accordingly.\n this.set_axisline_scale_range();\n this.axis.scale(this.axis_line_scale);\n this.set_tick_values();\n let transform;\n if (this.vertical) {\n transform = \"translate(\" + ((this.side === \"right\") ?\n this.bar_height : 0) + \", 0)\";\n }\n else {\n transform = \"translate(0, \" + ((this.side === \"top\") ?\n 0 : this.bar_height) + \")\";\n }\n this.g_axisline.attr(\"transform\", transform)\n .call(this.axis);\n }\n }\n set_axisline_domain() {\n const domain = this.axis_scale.scale.domain();\n if (this.ordinal) {\n this.axis_line_scale.domain(domain);\n }\n else {\n const mid = this.axis_scale.model.mid;\n if (mid === undefined || mid === null) {\n this.axis_line_scale.domain([domain[0], domain[domain.length - 1]]);\n }\n else {\n this.axis_line_scale.domain([domain[0], mid, domain[domain.length - 1]]);\n }\n }\n }\n redraw_axis() {\n this.draw_color_bar();\n this.redraw_axisline();\n }\n}\nexports.ColorAxis = ColorBar;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sb3JBeGlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NvbG9yQXhpcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLDhIQUE4SDtBQUM5SCxpQ0FBOEI7QUFFOUIsTUFBTSxRQUFTLFNBQVEsV0FBSTtJQUV2QixNQUFNO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLFVBQVUsQ0FBQztRQUU3RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO2FBQzlCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNoRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst version_1 = require(\"./version\");\nconst _ = __importStar(require(\"underscore\"));\nclass PanZoomModel extends widgets.WidgetModel {\n defaults() {\n return Object.assign({}, widgets.WidgetModel.prototype.defaults(), { _model_name: \"PanZoomModel\", _view_name: \"PanZoom\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, scales: {}, allow_pan: true, allow_zoom: true });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on(\"change:scales\", this.snapshot_scales, this);\n this.snapshot_scales();\n }\n reset_scales() {\n widgets.resolvePromisesDict(this.get(\"scales\")).then((scales) => {\n _.each(Object.keys(scales), (k) => {\n _.each(scales[k], (s, i) => {\n s.set_state(this.scales_states[k][i]);\n }, this);\n }, this);\n });\n }\n snapshot_scales() {\n // Save the state of the scales.\n widgets.resolvePromisesDict(this.get(\"scales\")).then((scales) => {\n this.scales_states = Object.keys(scales).reduce((obj, key) => {\n obj[key] = scales[key].map((s) => {\n return s.get_state();\n });\n return obj;\n }, {});\n });\n }\n}\nPanZoomModel.serializers = Object.assign({}, widgets.WidgetModel.serializers, { scales: { deserialize: widgets.unpack_models } });\nexports.PanZoomModel = PanZoomModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFuWm9vbU1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1Bhblpvb21Nb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsK0RBQWlEO0FBQ2pELHVDQUF5QztBQUN6Qyw4Q0FBZ0M7QUFFaEMsTUFDTSxZQUFhLFNBQVEsT0FBTyxDQUFDLFdBQVc7SUFFMUMsUUFBUTtRQUNKLHlCQUFXLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUMvQyxXQUFXLEVBQUUsY0FBYyxFQUMzQixVQUFVLEVBQUUsU0FBUyxFQUNyQixhQUFhLEVBQUUsUUFBUSxFQUN2QixZQUFZLEVBQUUsUUFBUSxFQUN0QixxQkFBcUIsRUFBRSxzQkFBWSxFQUNuQyxvQkFBb0IsRUFBRSxzQkFBWSxFQUNsQyxNQUFNLEVBQUUsRUFBRSxFQUNWLFNBQVMsRUFBRSxJQUFJLEVBQ2YsVUFBVSxFQUFFLElBQUksSUFDbEI7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPO1FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNqRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzVCLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDYixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxlQUFlO1FBQ1gsZ0NBQWdDO1FBQ2hDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDakUsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDekQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDN0IsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUE7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sR0FBRyxDQUFDO1lBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQUVNLHdCQUFXLHFCQUNYLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUNsQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUNoRDtBQWhETixvQ0FtREMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-format\"), require(\"d3-interpolate\"), require(\"d3-shape\"));\n// Hack to fix problem with webpack providing multiple d3 objects\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst _ = __importStar(require(\"underscore\"));\nconst Mark_1 = require(\"./Mark\");\nconst utils_1 = require(\"./utils\");\nclass Pie extends Mark_1.Mark {\n render() {\n const base_creation_promise = super.render();\n this.selected_indices = this.model.get(\"selected\");\n this.selected_style = this.model.get(\"selected_style\");\n this.unselected_style = this.model.get(\"unselected_style\");\n this.display_el_classes = [\"slice\", \"text\"];\n this.pie_g = this.d3el.append(\"g\").attr(\"class\", \"pie\");\n this.pie_g.append(\"g\").attr(\"class\", \"slices\");\n this.pie_g.append(\"g\").attr(\"class\", \"labels\");\n this.pie_g.append(\"g\").attr(\"class\", \"lines\");\n const radius = this.model.get(\"radius\");\n const inner_radius = this.model.get(\"inner_radius\");\n const display_labels = this.model.get(\"display_labels\");\n if (display_labels === \"outside\") {\n this.arc = d3.arc()\n .outerRadius(radius * 0.8)\n .innerRadius(inner_radius * 0.8);\n this.outer_arc = d3.arc()\n .innerRadius(radius * 0.9)\n .outerRadius(radius * 0.9);\n }\n else {\n this.arc = d3.arc()\n .outerRadius(radius)\n .innerRadius(inner_radius);\n }\n this.displayed.then(() => {\n this.parent.tooltip_div.node().appendChild(this.tooltip_div.node());\n this.create_tooltip();\n });\n return base_creation_promise.then(() => {\n this.event_listeners = {};\n this.process_interactions();\n this.create_listeners();\n this.compute_view_padding();\n this.draw();\n }, null);\n }\n set_ranges() {\n const x_scale = this.scales.x;\n if (x_scale) {\n x_scale.set_range(this.parent.padded_range(\"x\", x_scale.model));\n this.x_offset = x_scale.offset;\n }\n const y_scale = this.scales.y;\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n this.y_offset = y_scale.offset;\n }\n }\n set_positional_scales() {\n // If no scale for \"x\" or \"y\" is specified, figure scales are used.\n const x_scale = this.scales.x ? this.scales.x : this.parent.scale_x;\n const y_scale = this.scales.y ? this.scales.y : this.parent.scale_y;\n const that = this;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!that.model.dirty) {\n that.draw();\n }\n });\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!that.model.dirty) {\n that.draw();\n }\n });\n }\n create_listeners() {\n super.create_listeners();\n this.d3el\n .on(\"mouseover\", _.bind(function () {\n this.event_dispatcher(\"mouse_over\");\n }, this))\n .on(\"mousemove\", _.bind(function () {\n this.event_dispatcher(\"mouse_move\");\n }, this))\n .on(\"mouseout\", _.bind(function () {\n this.event_dispatcher(\"mouse_out\");\n }, this));\n this.listenTo(this.model, \"data_updated\", function () {\n //animate on data update\n const animate = true;\n this.draw(animate);\n });\n this.listenTo(this.model, \"colors_updated\", this.updateSlices);\n this.model.on_some_change([\"inner_radius\", \"radius\"], function () {\n this.compute_view_padding();\n const animate = true;\n this.update_radius(animate);\n }, this);\n this.model.on_some_change([\"colors\", \"stroke\", \"opacities\"], this.updateSlices, this);\n this.model.on_some_change([\"x\", \"y\"], function () {\n const animate = true;\n this.position_center(animate);\n }, this);\n this.model.on_some_change([\"display_labels\", \"label_color\", \"font_size\", \"font_weight\", \"display_values\", \"values_format\"], function () {\n const animate = true;\n this.updateLabels(animate);\n }, this);\n this.model.on_some_change([\"start_angle\", \"end_angle\", \"sort\"], function () {\n const animate = true;\n this.draw(animate);\n }, this);\n this.listenTo(this.model, \"labels_updated\", function () {\n const animate = true;\n this.updateLabels(animate);\n this.updatePolylines(animate);\n });\n this.listenTo(this.model, \"change:selected\", function () {\n this.selected_indices = this.model.get(\"selected\");\n this.apply_styles();\n });\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n this.listenTo(this.parent, \"bg_clicked\", function () {\n this.event_dispatcher(\"parent_clicked\");\n });\n }\n process_click(interaction) {\n super.process_click(interaction);\n if (interaction === \"select\") {\n this.event_listeners.parent_clicked = this.reset_selection;\n this.event_listeners.element_clicked = this.click_handler;\n }\n }\n relayout() {\n this.set_ranges();\n this.position_center();\n this.update_radius();\n }\n position_center(animate) {\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n const x_scale = this.scales.x ? this.scales.x : this.parent.scale_x;\n const y_scale = this.scales.y ? this.scales.y : this.parent.scale_y;\n const x = (x_scale.model.type === \"date\") ?\n utils_1.getDate(this.model.get(\"x\")) : this.model.get(\"x\");\n const y = (y_scale.model.type === \"date\") ?\n utils_1.getDate(this.model.get(\"y\")) : this.model.get(\"y\");\n const transform = \"translate(\" + (x_scale.scale(x) + x_scale.offset) +\n \", \" + (y_scale.scale(y) + y_scale.offset) + \")\";\n this.pie_g\n .transition(\"position_center\").duration(animation_duration)\n .attr(\"transform\", transform);\n }\n update_radius(animate) {\n const animation_duration = animate === true ?\n this.parent.model.get(\"animation_duration\") : 0;\n const radius = this.model.get(\"radius\");\n const inner_radius = this.model.get(\"inner_radius\");\n const display_labels = this.model.get(\"display_labels\");\n if (display_labels === \"inside\") {\n this.arc.outerRadius(radius).innerRadius(inner_radius);\n }\n else if (display_labels === \"outside\") {\n this.arc.outerRadius(radius * 0.8).innerRadius(inner_radius * 0.8);\n this.outer_arc.innerRadius(radius * 0.9).outerRadius(radius * 0.9);\n }\n const slices = this.pie_g.select(\".slices\");\n const labels = this.pie_g.select(\".labels\");\n const lines = this.pie_g.select(\".lines\");\n const that = this;\n slices.selectAll(\".slice\")\n .transition(\"update_radius\").duration(animation_duration)\n .attr(\"d\", this.arc);\n if (display_labels === \"inside\") {\n labels.selectAll(\"text\")\n .transition(\"update_radius\").duration(animation_duration)\n .attr(\"transform\", function (d) {\n return \"translate(\" + that.arc.centroid(d) + \")\";\n });\n }\n else if (display_labels === \"outside\") {\n labels.selectAll(\"text\")\n .transition(\"update_radius\").duration(animation_duration)\n .attr(\"transform\", function (d) {\n const pos = that.outer_arc.centroid(d);\n pos[0] = radius * (that.mid_angle_location(d) === \"left\" ? -1 : 1);\n return \"translate(\" + pos + \")\";\n });\n lines.selectAll(\"polyline\")\n .transition(\"update_radius\").duration(animation_duration)\n .attr(\"points\", function (d) {\n const pos = that.outer_arc.centroid(d);\n pos[0] = radius * 0.95 * (that.mid_angle_location(d) === \"left\" ? -1 : 1);\n return [that.arc.centroid(d), that.outer_arc.centroid(d), pos];\n });\n }\n }\n mid_angle_location(arc_data) {\n // decides if the location of the mid angle of the arc is toward left or right (to aid the\n // placement of label text)\n const mid_angle = (arc_data.startAngle + arc_data.endAngle) / 2;\n return (mid_angle > Math.PI || (mid_angle < 0 && mid_angle > -Math.PI)) ? \"left\" : \"right\";\n }\n draw(animate) {\n this.set_ranges();\n this.position_center(animate);\n this.d3Pie = d3.pie()\n .startAngle(this.model.get(\"start_angle\") * 2 * Math.PI / 360)\n .endAngle(this.model.get(\"end_angle\") * 2 * Math.PI / 360)\n .value(function (d) { return d.size; });\n if (!this.model.get(\"sort\")) {\n this.d3Pie.sort(null);\n }\n this.updateSlices(animate);\n this.updateLabels(animate);\n this.updatePolylines(animate);\n }\n updateSlices(animate) {\n const that = this;\n const animation_duration = animate === true ?\n this.parent.model.get(\"animation_duration\") : 0;\n // update pie slices\n const slices = this.pie_g.select(\".slices\")\n .selectAll(\".slice\")\n .data(this.d3Pie(this.model.mark_data));\n const stroke = this.model.get(\"stroke\");\n const opacities = this.model.get(\"opacities\");\n const colorScale = this.scales.color;\n slices.enter()\n .append('path')\n .attr('class', 'slice')\n .each(function (d) {\n this._current = d;\n })\n .on(\"click\", function (d, i) {\n return that.event_dispatcher(\"element_clicked\", { data: d, index: i });\n })\n .merge(slices)\n .transition(\"draw\")\n .duration(animation_duration)\n .style(\"fill\", function (d, i) {\n return (d.data.color !== undefined && colorScale !== undefined) ?\n colorScale.scale(d.data.color) : that.get_colors(d.data.index);\n })\n .style('stroke', stroke)\n .style('opacity', (d, i) => opacities[i])\n .attrTween(\"d\", function (d) {\n const interpolate = d3.interpolate(this._current, d);\n this._current = d;\n return function (t) { return that.arc(interpolate(t)); };\n });\n slices.exit()\n .transition('remove')\n .duration(animation_duration)\n .style('opacity', 0)\n .remove();\n this.apply_styles();\n }\n updateLabels(animate) {\n const that = this;\n const animation_duration = animate === true ?\n this.parent.model.get(\"animation_duration\") : 0;\n // Update labels\n const display_labels = this.model.get(\"display_labels\");\n const display_values = this.model.get(\"display_values\");\n const values_format = d3.format(this.model.get(\"values_format\"));\n const labels = this.pie_g.select(\".labels\")\n .selectAll(\"text\")\n .data(this.d3Pie(this.model.mark_data));\n const labelsTransition = labels.enter()\n .append(\"text\")\n .attr(\"dy\", \".35em\")\n .style(\"opacity\", 0)\n .each(function (d) {\n this._current = d;\n })\n .merge(labels)\n .transition(\"draw\")\n .duration(animation_duration)\n .text((d) => {\n if (d.data.label === '') {\n return '';\n }\n if (display_values) {\n return d.data.label + \": \" + values_format(d.data.size);\n }\n return d.data.label;\n })\n .style(\"font-weight\", this.model.get(\"font_weight\"))\n .style(\"font-size\", this.model.get(\"font_size\"))\n .style(\"opacity\", d => (display_labels === \"none\" || d.value == 0) ? 0 : 1);\n const color = this.model.get(\"label_color\");\n if (color !== undefined) {\n labelsTransition.style(\"fill\", color);\n }\n if (display_labels === \"inside\") {\n labelsTransition.attr(\"transform\", d => \"translate(\" + this.arc.centroid(d) + \")\")\n .style(\"text-anchor\", \"middle\");\n }\n else if (display_labels === \"outside\") {\n labelsTransition.attrTween(\"transform\", function (d) {\n const interpolate = d3.interpolate(this._current, d);\n const _this = this;\n return function (t) {\n const d2 = interpolate(t);\n _this._current = d2;\n const pos = that.outer_arc.centroid(d2);\n pos[0] = that.model.get(\"radius\") *\n (that.mid_angle_location(d) === \"left\" ? -1 : 1);\n return \"translate(\" + pos + \")\";\n };\n })\n .styleTween(\"text-anchor\", function (d) {\n const interpolate = d3.interpolate(this._current, d);\n return function (t) {\n const d2 = interpolate(t);\n return that.mid_angle_location(d2) === \"left\" ? \"end\" : \"start\";\n };\n });\n }\n labels.exit().remove();\n }\n updatePolylines(animate) {\n const that = this;\n const animation_duration = animate === true ?\n this.parent.model.get(\"animation_duration\") : 0;\n const display_labels = this.model.get(\"display_labels\");\n const polylines = this.pie_g.select(\".lines\")\n .selectAll(\"polyline\")\n .data(this.d3Pie(this.model.mark_data));\n const polylinesTransition = polylines.enter()\n .append(\"polyline\")\n .each(function (d) {\n this._current = d;\n })\n .merge(polylines)\n .transition(\"draw\")\n .duration(animation_duration)\n .style(\"opacity\", d => (display_labels !== \"outside\" || d.value == 0 || d.data.label === \"\") ? 0 : 1);\n if (display_labels === 'outside') {\n polylinesTransition.attrTween(\"points\", function (d) {\n this._current = this._current;\n const interpolate = d3.interpolate(this._current, d);\n const _this = this;\n return function (t) {\n const d2 = interpolate(t);\n _this._current = d2;\n const pos = that.outer_arc.centroid(d2);\n pos[0] = that.model.get(\"radius\") * 0.95 *\n (that.mid_angle_location(d2) === \"left\" ? -1 : 1);\n return [that.arc.centroid(d2), that.outer_arc.centroid(d2), pos];\n };\n });\n }\n polylines.exit().remove();\n }\n clear_style(style_dict, indices) {\n // Function to clear the style of a dict on some or all the elements of the\n // chart. If indices is null, clears the style on all elements. If\n // not, clears on only the elements whose indices are matching.\n let elements = this.pie_g.selectAll(\".slice\");\n if (indices) {\n elements = elements.filter(function (d, index) {\n return indices.indexOf(index) !== -1;\n });\n }\n const clearing_style = {};\n for (let key in style_dict) {\n clearing_style[key] = null;\n }\n elements.styles(clearing_style);\n }\n set_style_on_elements(style, indices) {\n // If the index array is undefined or of length=0, exit the\n // function without doing anything\n if (indices === undefined || indices === null || indices.length === 0) {\n return;\n }\n let elements = this.pie_g.selectAll(\".slice\");\n elements = elements.filter(function (data, index) {\n return indices.indexOf(index) !== -1;\n });\n elements.styles(style);\n }\n set_default_style(indices) {\n // For all the elements with index in the list indices, the default\n // style is applied.\n const that = this;\n const stroke = this.model.get(\"stroke\");\n const opacities = this.model.get(\"opacities\");\n const colorScale = this.scales.color;\n // Update pie slices\n this.pie_g.select(\".slices\")\n .selectAll(\".slice\")\n .style('fill', function (d, i) {\n return (d.data.color !== undefined && colorScale !== undefined) ?\n colorScale.scale(d.data.color) : that.get_colors(d.data.index);\n })\n .style('stroke', stroke)\n .style('opacity', (d, i) => opacities[i]);\n }\n click_handler(args) {\n const index = args.index;\n const that = this;\n const idx = this.model.get(\"selected\") || [];\n let selected = Array.from(idx);\n // index of slice i. Checking if it is already present in the list.\n const elem_index = selected.indexOf(index);\n // Replacement for \"Accel\" modifier.\n const accelKey = d3GetEvent().ctrlKey || d3GetEvent().metaKey;\n if (elem_index > -1 && accelKey) {\n // if the index is already selected and if accel key is\n // pressed, remove the element from the list\n selected.splice(elem_index, 1);\n }\n else {\n if (d3GetEvent().shiftKey) {\n //If shift is pressed and the element is already\n //selected, do not do anything\n if (elem_index > -1) {\n return;\n }\n //Add elements before or after the index of the current\n //slice which has been clicked\n const min_index = (selected.length !== 0) ?\n d3.min(selected) : -1;\n const max_index = (selected.length !== 0) ?\n d3.max(selected) : that.model.mark_data.length;\n if (index > max_index) {\n _.range(max_index + 1, index).forEach(function (i) {\n selected.push(i);\n });\n }\n else if (index < min_index) {\n _.range(index + 1, min_index).forEach(function (i) {\n selected.push(i);\n });\n }\n }\n else if (!accelKey) {\n selected = [];\n }\n // updating the array containing the slice indexes selected\n // and updating the style\n selected.push(index);\n }\n this.model.set(\"selected\", ((selected.length === 0) ? null : new Uint32Array(selected)), { updated_view: this });\n this.touch();\n const e = d3GetEvent();\n if (e.cancelBubble !== undefined) { // IE\n e.cancelBubble = true;\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n e.preventDefault();\n this.selected_indices = selected;\n this.apply_styles();\n }\n reset_selection() {\n this.model.set(\"selected\", null);\n this.touch();\n this.selected_indices = null;\n this.clear_style(this.selected_style);\n this.clear_style(this.unselected_style);\n this.set_default_style();\n }\n compute_view_padding() {\n const scales = this.model.get(\"scales\");\n const r = d3.max([this.model.get(\"radius\"), this.model.get(\"inner_radius\")]);\n const x_padding = (scales.x) ? (r + 1) : 0;\n const y_padding = (scales.y) ? (r + 1) : 0;\n if (x_padding !== this.x_padding || y_padding !== this.y_padding) {\n this.x_padding = x_padding;\n this.y_padding = y_padding;\n this.trigger(\"mark_padding_updated\");\n }\n }\n}\nexports.Pie = Pie;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGllLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BpZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLDhCQUE0QjtBQUM1Qix3SEFBd0g7QUFDeEgsaUVBQWlFO0FBQ2pFLE1BQU0sVUFBVSxHQUFHLGNBQVcsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSw4Q0FBZ0M7QUFDaEMsaUNBQThCO0FBQzlCLG1DQUFrQztBQUVsQyxNQUFhLEdBQUksU0FBUSxXQUFJO0lBQ3pCLE1BQU07UUFDRixNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxD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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-scale\"), require(\"d3-scale-chromatic\"));\nconst MarkModel_1 = require(\"./MarkModel\");\nconst utils_1 = require(\"./utils\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass PieModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"PieModel\", _view_name: \"Pie\", sizes: [], labels: [], color: null, x: 0.5, y: 0.5, scales_metadata: {\n color: { dimension: \"color\" }\n }, sort: false, colors: d3.scaleOrdinal(d3.schemeCategory10).range(), stroke: null, opacities: [], radius: 180, inner_radius: 0.1, start_angle: 0.0, end_angle: 360.0, display_labels: 'inside', display_values: false, values_format: '.1f', label_color: null, font_size: '12px', font_weight: 'normal' });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on(\"change:sizes\", this.update_data, this);\n this.on(\"change:color\", function () {\n this.update_color();\n this.trigger(\"colors_updated\");\n }, this);\n this.on(\"change:labels\", this.update_labels, this);\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.update_data();\n this.update_color();\n this.update_labels();\n this.update_domains();\n }\n update_data() {\n const sizes = this.get(\"sizes\");\n const color = this.get(\"color\") || [];\n const labels = this.get(\"labels\");\n this.mark_data = Array.prototype.map.call(sizes, function (d, i) {\n return {\n size: d,\n color: color[i],\n // jshint eqnull: true\n label: labels[i] == null ? \"\" : labels[i],\n index: i\n };\n });\n this.update_color();\n this.update_domains();\n this.trigger(\"data_updated\");\n }\n update_labels() {\n if (!this.mark_data) {\n return;\n }\n const labels = this.get(\"labels\");\n this.mark_data.forEach(function (data, index) {\n // jshint eqnull: true\n data.label = labels[index] == null ? \"\" : labels[index];\n });\n this.trigger(\"labels_updated\");\n }\n update_color() {\n if (!this.mark_data) {\n return;\n }\n const color = this.get(\"color\");\n const color_scale = this.get(\"scales\").color;\n if (color_scale) {\n if (!this.get(\"preserve_domain\").color) {\n color_scale.compute_and_set_domain(color, this.model_id + \"_color\");\n }\n else {\n color_scale.del_domain([], this.model_id + \"_color\");\n }\n }\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n const scales = this.get(\"scales\");\n const x_scale = scales.x;\n const y_scale = scales.y;\n if (x_scale) {\n const x = (x_scale.type === \"date\") ?\n utils_1.getDate(this.get(\"x\")) : this.get(\"x\");\n if (!this.get(\"preserve_domain\").x) {\n x_scale.compute_and_set_domain([x], this.model_id + \"_x\");\n }\n else {\n x_scale.del_domain([], this.model_id + \"_x\");\n }\n }\n if (y_scale) {\n if (!this.get(\"preserve_domain\").y) {\n y_scale.compute_and_set_domain([this.get(\"y\")], this.model_id + \"_y\");\n }\n else {\n y_scale.del_domain([], this.model_id + \"_y\");\n }\n }\n }\n get_data_dict(data, index) {\n return data.data;\n }\n}\nPieModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { sizes: serialize.array_or_json, color: serialize.array_or_json });\nexports.PieModel = PieModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGllTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGllTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QixpRkFBaUY7QUFDakYsMkNBQXdDO0FBQ3hDLG1DQUFrQztBQUNsQyx1REFBeUM7QUFFekMsTUFBYSxRQUFTLFNBQVEscUJBQVM7SUFFbkMsUUFBUTtRQUNKLHlCQUFXLHFCQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUNyQyxXQUFXLEVBQUUsVUFBVSxFQUN2QixVQUFVLEVBQUUsS0FBSyxFQUVqQixLQUFLLEVBQUUsRUFBRSxFQUNULE1BQU0sRUFBRSxFQUFFLEVBQ1YsS0FBSyxFQUFFLElBQUksRUFDWCxDQUFDLEVBQUUsR0FBRyxFQUNOLENBQUMsRUFBRSxHQUFHLEVBQ04sZUFBZSxFQUFFO2dCQUNiLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7YUFDaEMsRUFDRCxJQUFJLEVBQUUsS0FBSyxFQUNYLE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUNwRCxNQUFNLEVBQUUsSUFBSSxFQUNaLFNBQVMsRUFBRSxFQUFFLEVBQ2IsTUFBTSxFQUFFLEdBQUcsRUFDWCxZQUFZLEVBQUUsR0FBRyxFQUNqQixXQUFXLEVBQUUsR0FBRyxFQUNoQixTQUFTLEVBQUUsS0FBSyxFQUNoQixjQUFjLEVBQUUsUUFBUSxFQUN4QixjQUFjLEVBQUUsS0FBSyxFQUNyQixhQUFhLEVBQUUsS0FBSyxFQUNwQixXQUFXLEVBQUUsSUFBSSxFQUNqQixTQUFTLEVBQUUsTUFBTSxFQUNqQixXQUFXLEVBQUUsUUFBUSxJQUN2QjtJQUNOLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxV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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-scale\"));\nconst ColorScale_1 = require(\"./ColorScale\");\nclass DateColorScale extends ColorScale_1.ColorScale {\n create_d3_scale() {\n this.scale = d3.scaleTime();\n }\n}\nexports.DateColorScale = DateColorScale;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZUNvbG9yU2NhbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRGF0ZUNvbG9yU2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QixrREFBa0Q7QUFDbEQsNkNBQTBDO0FBRTFDLE1BQWEsY0FBZSxTQUFRLHVCQUFVO0lBRTFDLGVBQWU7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0NBQ0o7QUFMRCx3Q0FLQyJ9","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ColorScaleModel_1 = require(\"./ColorScaleModel\");\nconst utils_1 = require(\"./utils\");\nclass DateColorScaleModel extends ColorScaleModel_1.ColorScaleModel {\n defaults() {\n return Object.assign({}, ColorScaleModel_1.ColorScaleModel.prototype.defaults(), { _model_name: \"DateColorScaleModel\", _view_name: \"DateColorScale\", min: null, max: null, mid: null });\n }\n set_init_state() {\n this.type = \"date_color_linear\";\n this.color_range = [];\n this.mid = null;\n this.global_min = (new Date()).setTime(0);\n this.global_max = new Date();\n }\n min_max_changed() {\n this.min = utils_1.getDate(this.get(\"min\"));\n this.max = utils_1.getDate(this.get(\"max\"));\n this.min_from_data = (this.min === null);\n this.max_from_data = (this.max === null);\n this.update_domain();\n }\n toDomainType(value) {\n return new Date(value);\n }\n}\nexports.DateColorScaleModel = DateColorScaleModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZUNvbG9yU2NhbGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9EYXRlQ29sb3JTY2FsZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUVILHVEQUFvRDtBQUNwRCxtQ0FBa0M7QUFFbEMsTUFBYSxtQkFBb0IsU0FBUSxpQ0FBZTtJQUVwRCxRQUFRO1FBQ0oseUJBQVcsaUNBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQzNDLFdBQVcsRUFBRSxxQkFBcUIsRUFDbEMsVUFBVSxFQUFFLGdCQUFnQixFQUM1QixHQUFHLEVBQUUsSUFBSSxFQUNULEdBQUcsRUFBRSxJQUFJLEVBQ1QsR0FBRyxFQUFFLElBQUksSUFDWDtJQUNOLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsR0FBRyxHQUFHLGVBQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxlQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRVMsWUFBWSxDQUFDLEtBQWE7UUFDaEMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBQ0o7QUEvQkQsa0RBK0JDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-scale\"));\nconst LinearScale_1 = require(\"./LinearScale\");\nclass DateScale extends LinearScale_1.LinearScale {\n render() {\n this.scale = d3.scaleTime();\n if (this.model.domain.length > 0)\n this.scale.domain(this.model.domain);\n this.offset = 0;\n this.create_event_listeners();\n }\n}\nexports.DateScale = DateScale;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVNjYWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0RhdGVTY2FsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLGtEQUFrRDtBQUNsRCwrQ0FBNEM7QUFFNUMsTUFBYSxTQUFVLFNBQVEseUJBQVc7SUFDdEMsTUFBTTtRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0NBQ0o7QUFSRCw4QkFRQyJ9","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ScatterBase_1 = require(\"./ScatterBase\");\nconst markers = __importStar(require(\"./Markers\"));\nconst d3 = __importStar(require(\"d3\"));\n// const d3 =Object.assign({}, require(\"d3-selection\"));\nconst bqSymbol = markers.symbol;\nclass Scatter extends ScatterBase_1.ScatterBase {\n render() {\n this.dot = bqSymbol()\n .type(this.model.get(\"marker\"))\n .size(this.model.get(\"default_size\"))\n .skew(this.model.get(\"default_skew\"));\n return super.render();\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:colors\", this.update_colors);\n this.listenTo(this.model, \"change:stroke\", this.update_stroke);\n this.listenTo(this.model, \"change:stroke_width\", this.update_stroke_width);\n this.listenTo(this.model, \"change:default_opacities\", this.update_default_opacities);\n this.listenTo(this.model, \"change:default_skew\", this.update_default_skew);\n this.listenTo(this.model, \"change:marker\", this.update_marker);\n this.listenTo(this.model, \"change:default_size\", this.update_default_size);\n this.listenTo(this.model, \"change:fill\", this.update_fill);\n this.listenTo(this.model, \"change:display_names\", this.update_names);\n }\n update_colors(model, new_colors) {\n if (!this.model.dirty) {\n const that = this;\n const stroke = this.model.get(\"stroke\");\n const len = new_colors.length;\n this.d3el.selectAll(\".dot\")\n .style(\"fill\", this.model.get(\"fill\") ?\n function (d, i) {\n return that.get_element_color(d, i);\n } : \"none\")\n .style(\"stroke\", stroke ? stroke : function (d, i) {\n return that.get_element_color(d, i);\n });\n if (this.legend_el) {\n this.legend_el.select(\"path\")\n .style(\"fill\", function (d, i) {\n return new_colors[i % len];\n })\n .style(\"stroke\", stroke ? stroke : function (d, i) {\n return new_colors[i % len];\n });\n this.legend_el.select(\"text\")\n .style(\"fill\", this.model.get(\"fill\") ? function (d, i) {\n return new_colors[i % len];\n } : \"none\");\n }\n }\n this.apply_styles();\n }\n update_fill(model, fill) {\n const that = this;\n const colors = this.model.get(\"colors\");\n const len = colors.length;\n this.d3el.selectAll(\".dot\").style(\"fill\", fill ? function (d, i) {\n return that.get_element_color(d, i);\n } : \"none\");\n if (this.legend_el) {\n this.legend_el.selectAll(\"path\")\n .style(\"fill\", fill ? function (d, i) {\n return colors[i % len];\n } : \"none\");\n }\n }\n update_stroke_width() {\n const stroke_width = this.model.get(\"stroke_width\");\n this.d3el.selectAll(\".dot\")\n .style(\"stroke-width\", stroke_width);\n if (this.legend_el) {\n this.legend_el.selectAll(\"path\")\n .style(\"stroke-width\", stroke_width);\n }\n }\n update_stroke(model, fill) {\n const that = this;\n const stroke = this.model.get(\"stroke\");\n this.d3el.selectAll(\".dot\")\n .style(\"stroke\", stroke ? stroke : function (d, i) {\n return that.get_element_color(d, i);\n });\n if (this.legend_el) {\n this.legend_el.selectAll(\"path\")\n .style(\"stroke\", stroke);\n }\n }\n update_default_opacities(animate) {\n if (!this.model.dirty) {\n const default_opacities = this.model.get(\"default_opacities\");\n const colors = this.model.get(\"colors\");\n const len = colors.length;\n const len_opac = default_opacities.length;\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n // update opacity scale range?\n const that = this;\n this.d3el.selectAll(\".dot\")\n .transition(\"update_default_opacities\")\n .duration(animation_duration)\n .style(\"opacity\", function (d, i) {\n return that.get_element_opacity(d, i);\n });\n if (this.legend_el) {\n this.legend_el.select(\"path\")\n .style(\"opacity\", function (d, i) {\n return default_opacities[i % len_opac];\n })\n .style(\"fill\", function (d, i) {\n return colors[i % len];\n });\n }\n }\n }\n update_marker(model, marker) {\n if (!this.model.dirty) {\n this.d3el.selectAll(\".dot\")\n .transition(\"update_marker\")\n .duration(this.parent.model.get(\"animation_duration\"))\n .attr(\"d\", this.dot.type(marker));\n if (this.legend_el) {\n this.legend_el.select(\"path\")\n .attr(\"d\", this.dot.type(marker));\n }\n }\n }\n update_default_skew(animate) {\n if (!this.model.dirty) {\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n const that = this;\n this.d3el.selectAll(\".dot\")\n .transition(\"update_default_skew\")\n .duration(animation_duration)\n .attr(\"d\", this.dot.skew(function (d) {\n return that.get_element_skew(d);\n }));\n }\n }\n update_default_size(animate) {\n this.compute_view_padding();\n // update size scale range?\n if (!this.model.dirty) {\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n const that = this;\n this.d3el.selectAll(\".dot\")\n .transition(\"update_default_size\")\n .duration(animation_duration)\n .attr(\"d\", this.dot.size(function (d) {\n return that.get_element_size(d);\n }));\n // Label positions also need to change\n this.update_names(animate);\n }\n }\n update_names(animate) {\n const that = this;\n const names = this.model.get(\"names\") || [];\n const show_names = this.model.get(\"display_names\") && names.length !== 0;\n const animation_duration = animate ? this.parent.model.get(\"animation_duration\") : 0;\n this.d3el.selectAll(\".object_grp\").select(\"text\")\n .text(function (d) { return d.name; })\n .transition(\"update_names\")\n .duration(animation_duration)\n .attr(\"transform\", function (d) {\n const text_loc = Math.sqrt(that.get_element_size(d)) / 2.0;\n return \"translate(\" + (text_loc) + \",\" + (-text_loc) + \")\";\n })\n .attr(\"display\", function (d) {\n return (show_names) ? \"inline\" : \"none\";\n });\n }\n color_scale_updated(animate) {\n const that = this, fill = this.model.get(\"fill\"), stroke = this.model.get(\"stroke\");\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n this.d3el.selectAll(\".object_grp\")\n .select(\"path\")\n .transition(\"color_scale_updated\")\n .duration(animation_duration)\n .style(\"fill\", fill ?\n function (d, i) {\n return that.get_element_color(d, i);\n } : \"none\")\n .style(\"stroke\", stroke ? stroke : function (d, i) {\n return that.get_element_color(d, i);\n });\n }\n draw_elements(animate, elements_added) {\n const that = this;\n const animation_duration = animate === true ? this.parent.model.get(\"animation_duration\") : 0;\n const elements = this.d3el.selectAll(\".object_grp\");\n elements_added.append(\"path\").attr(\"class\", \"dot element\");\n elements_added.append(\"text\").attr(\"class\", \"dot_text\");\n elements.select(\"path\")\n .transition(\"draw_elements\")\n .duration(animation_duration)\n .attr(\"d\", this.dot\n .size(function (d) { return that.get_element_size(d); })\n .skew(function (d) { return that.get_element_skew(d); }));\n this.update_names(animate);\n this.apply_styles();\n }\n draw_legend_elements(elements_added, rect_dim) {\n const colors = this.model.get(\"colors\"), len = colors.length, stroke = this.model.get(\"stroke\");\n elements_added.append(\"path\")\n .attr(\"transform\", function (d, i) {\n return \"translate( \" + rect_dim / 2 + \", \" + rect_dim / 2 + \")\";\n })\n .attr(\"d\", this.dot.size(64))\n .style(\"fill\", this.model.get(\"fill\") ?\n function (d, i) {\n return colors[i % len];\n } : \"none\")\n .style(\"stroke\", stroke ? stroke :\n function (d, i) {\n return colors[i % len];\n });\n }\n set_default_style(indices) {\n // For all the elements with index in the list indices, the default\n // style is applied.\n if (!indices || indices.length === 0) {\n return;\n }\n const elements = this.d3el.selectAll(\".element\").filter(function (data, index) {\n return indices.indexOf(index) !== -1;\n });\n const fill = this.model.get(\"fill\"), stroke = this.model.get(\"stroke\"), stroke_width = this.model.get(\"stroke_width\"), that = this;\n elements\n .style(\"fill\", fill ? function (d, i) {\n return that.get_element_color(d, i);\n } : \"none\")\n .style(\"stroke\", stroke ? stroke : function (d, i) {\n return that.get_element_color(d, i);\n }).style(\"opacity\", function (d, i) {\n return that.get_element_opacity(d, i);\n }).style(\"stroke-width\", stroke_width);\n }\n set_drag_style(d, i, dragged_node) {\n d3.select(dragged_node)\n .select(\"path\")\n .classed(\"drag_scatter\", true)\n .transition(\"set_drag_style\")\n .attr(\"d\", this.dot.size(5 * this.model.get(\"default_size\")));\n const drag_color = this.model.get(\"drag_color\");\n if (drag_color) {\n d3.select(dragged_node)\n .select(\"path\")\n .style(\"fill\", drag_color)\n .style(\"stroke\", drag_color);\n }\n }\n reset_drag_style(d, i, dragged_node) {\n const stroke = this.model.get(\"stroke\"), original_color = this.get_element_color(d, i);\n d3.select(dragged_node)\n .select(\"path\")\n .classed(\"drag_scatter\", false)\n .transition(\"reset_drag_style\")\n .attr(\"d\", this.dot.size(this.get_element_size(d)));\n if (this.model.get(\"drag_color\")) {\n d3.select(dragged_node)\n .select(\"path\")\n .style(\"fill\", original_color)\n .style(\"stroke\", stroke ? stroke : original_color);\n }\n }\n}\nexports.Scatter = Scatter;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TY2F0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCwrQ0FBMEM7QUFDMUMsbURBQXFDO0FBQ3JDLHVDQUF5QjtBQUN6Qix3REFBd0Q7QUFFeEQsTUFBTSxRQUFRLEdBQVEsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUdyQyxNQUFhLE9BQVEsU0FBUSx5QkFBVztJQUVwQyxNQUFNO1FBRUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLEVBQUU7YUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUV4QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxJQUFJLENBQUMsd0JBQXdC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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LinearScaleModel_1 = require(\"./LinearScaleModel\");\nconst utils_1 = require(\"./utils\");\nclass DateScaleModel extends LinearScaleModel_1.LinearScaleModel {\n defaults() {\n return Object.assign({}, LinearScaleModel_1.LinearScaleModel.prototype.defaults(), { _model_name: \"DateScaleModel\", _view_name: \"DateScale\", min: null, max: null });\n }\n set_init_state() {\n this.type = \"date\";\n this.global_min = (new Date()).setTime(0);\n this.global_max = new Date();\n }\n min_max_changed() {\n this.min = utils_1.getDate(this.get(\"min\"));\n this.max = utils_1.getDate(this.get(\"max\"));\n this.min_from_data = (this.min === null);\n this.max_from_data = (this.max === null);\n this.update_domain();\n }\n}\nexports.DateScaleModel = DateScaleModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVNjYWxlTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRGF0ZVNjYWxlTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7O0FBSUgseURBQXNEO0FBQ3RELG1DQUFrQztBQUdsQyxNQUFhLGNBQWUsU0FBUSxtQ0FBZ0I7SUFFaEQsUUFBUTtRQUNKLHlCQUFXLG1DQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFDNUMsV0FBVyxFQUFFLGdCQUFnQixFQUM3QixVQUFVLEVBQUUsV0FBVyxFQUN2QixHQUFHLEVBQUUsSUFBSSxFQUNULEdBQUcsRUFBRSxJQUFJLElBQ1g7SUFDTixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxHQUFHLEdBQUcsZUFBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxHQUFHLGVBQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FDSjtBQXhCRCx3Q0F3QkMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-scale\"), require(\"d3-scale-chromatic\"), require(\"d3-array\"));\nconst _ = __importStar(require(\"underscore\"));\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nconst utils = __importStar(require(\"./utils\"));\nclass LinesModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"LinesModel\", _view_name: \"Lines\", x: [], y: [], color: null, scales_metadata: {\n x: { orientation: \"horizontal\", dimension: \"x\" },\n y: { orientation: \"vertical\", dimension: \"y\" },\n color: { dimension: \"color\" }\n }, colors: d3.scaleOrdinal(d3.schemeCategory10).range(), fill_colors: d3.scaleOrdinal(d3.schemeCategory10).range(), stroke_width: 2.0, labels_visibility: \"none\", curves_subset: [], line_style: \"solid\", interpolation: \"linear\", close_path: false, fill: \"none\", marker: null, marker_size: 64, opacities: [], fill_opacities: [] });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"x\", \"y\", \"color\"], this.update_data, this);\n this.on(\"change:labels\", this.update_labels, this);\n // FIXME: replace this with on(\"change:preserve_domain\"). It is not done here because\n // on_some_change depends on the GLOBAL backbone on(\"change\") handler which\n // is called AFTER the specific handlers on(\"change:foobar\") and we make that\n // assumption.\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.update_data();\n this.update_domains();\n }\n update_data() {\n this.dirty = true;\n // Handling data updates\n const that = this;\n this.x_data = this.get(\"x\");\n this.y_data = this.get(\"y\");\n this.color_data = this.get(\"color\") || [];\n let curve_labels = this.get(\"labels\");\n if (this.x_data.length === 0 || this.y_data.length === 0) {\n this.mark_data = [];\n }\n else {\n this.x_data = utils.is_array(this.x_data[0]) ?\n this.x_data : [this.x_data];\n this.y_data = utils.is_array(this.y_data[0]) ?\n this.y_data : [this.y_data];\n curve_labels = this.get_labels();\n const y_length = this.y_data.length;\n if (this.x_data.length == 1 && y_length > 1) {\n // same x for all y\n this.mark_data = curve_labels.map(function (name, i) {\n return {\n name: name,\n // since y_data may be a TypedArray, explicitly use Array.map\n values: Array.prototype.map.call(that.y_data[i], function (d, j) {\n return { x: that.x_data[0][j], y: d,\n y0: that.y_data[Math.min(i + 1, y_length - 1)][j],\n sub_index: j };\n }),\n color: that.color_data[i],\n index: i,\n };\n });\n }\n else {\n this.mark_data = curve_labels.map(function (name, i) {\n const xy_data = d3.zip(that.x_data[i], that.y_data[i]);\n return {\n name: name,\n values: xy_data.map(function (d, j) {\n return { x: d[0], y: d[1],\n y0: that.y_data[Math.min(i + 1, y_length - 1)][j],\n sub_index: j };\n }),\n color: that.color_data[i],\n index: i,\n };\n });\n }\n }\n this.update_domains();\n this.dirty = false;\n this.trigger(\"data_updated\");\n }\n update_labels() {\n // update the names in mark_data\n const labels = this.get_labels();\n this.mark_data.forEach(function (element, i) {\n element.name = labels[i];\n });\n this.trigger(\"labels_updated\");\n }\n get_labels() {\n // Function to set the labels appropriately.\n // Setting the labels to the value sent and filling in the\n // remaining values.\n let curve_labels = this.get(\"labels\");\n const data_length = (this.x_data.length == 1) ?\n (this.y_data.length) : Math.min(this.x_data.length, this.y_data.length);\n if (curve_labels.length > data_length) {\n curve_labels = curve_labels.slice(0, data_length);\n }\n else if (curve_labels.length < data_length) {\n _.range(curve_labels.length, data_length).forEach(function (index) {\n curve_labels[index] = \"C\" + (index + 1);\n });\n }\n return curve_labels;\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n const scales = this.get(\"scales\");\n const x_scale = scales.x, y_scale = scales.y;\n const color_scale = scales.color;\n if (!this.get(\"preserve_domain\").x) {\n x_scale.compute_and_set_domain(this.mark_data.map(function (elem) {\n return elem.values.map(function (d) { return d.x; });\n }), this.model_id + \"_x\");\n }\n else {\n x_scale.del_domain([], this.model_id + \"_x\");\n }\n if (!this.get(\"preserve_domain\").y) {\n y_scale.compute_and_set_domain(this.mark_data.map(function (elem) {\n return elem.values.map(function (d) { return d.y; });\n }), this.model_id + \"_y\");\n }\n else {\n y_scale.del_domain([], this.model_id + \"_y\");\n }\n if (color_scale !== null && color_scale !== undefined) {\n if (!this.get(\"preserve_domain\").color) {\n color_scale.compute_and_set_domain(this.mark_data.map(function (elem) {\n return elem.color;\n }), this.model_id + \"_color\");\n }\n else {\n color_scale.del_domain([], this.model_id + \"_color\");\n }\n }\n }\n get_data_dict(data, index) {\n return data;\n }\n}\nLinesModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { x: serialize.array_or_json, y: serialize.array_or_json, color: serialize.array_or_json });\nexports.LinesModel = LinesModel;\nclass FlexLineModel extends LinesModel {\n defaults() {\n return Object.assign({}, LinesModel.prototype.defaults(), { _model_name: \"FlexLineModel\", _view_name: \"FlexLine\", x: [], y: [], color: null, scales_metadata: {\n x: { orientation: \"horizontal\", dimension: \"x\" },\n y: { orientation: \"vertical\", dimension: \"y\" },\n color: { dimension: \"color\" }\n }, colors: d3.scaleOrdinal(d3.schemeCategory10).range(), fill_colors: d3.scaleOrdinal(d3.schemeCategory10).range(), stroke_width: 2.0, labels_visibility: \"none\", curves_subset: [], line_style: \"solid\", interpolation: \"linear\", close_path: false, fill: \"none\", marker: null, marker_size: 64, opacities: [], fill_opacities: [] });\n }\n update_data() {\n this.dirty = true;\n // Handling data updates\n const that = this;\n this.x_data = this.get(\"x\");\n this.y_data = this.get(\"y\");\n let curve_labels = this.get(\"labels\");\n if (this.x_data.length === 0 || this.y_data.length === 0) {\n this.mark_data = [];\n this.data_len = 0;\n }\n else {\n this.x_data = !_.isNumber(this.x_data[0]) ?\n this.x_data : [this.x_data];\n this.y_data = !_.isNumber(this.y_data[0]) ?\n this.y_data : [this.y_data];\n curve_labels = this.get_labels();\n const color_data = this.get(\"color\") || [];\n const width_data = this.get(\"width\") || [];\n this.data_len = Math.min(this.x_data[0].length, this.y_data[0].length);\n this.mark_data = [{\n name: curve_labels[0],\n values: _.range(this.data_len - 1).map(function (val, index) {\n return {\n x1: that.x_data[0][index],\n y1: that.y_data[0][index],\n x2: that.x_data[0][index + 1],\n y2: that.y_data[0][index + 1],\n color: color_data[index],\n size: width_data[index]\n };\n })\n }];\n }\n this.update_domains();\n this.dirty = false;\n this.trigger(\"data_updated\");\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n const scales = this.get(\"scales\");\n const x_scale = scales.x, y_scale = scales.y;\n const color_scale = scales.color;\n const width_scale = scales.width;\n if (!this.get(\"preserve_domain\").x) {\n x_scale.compute_and_set_domain(this.x_data[0].slice(0, this.data_len), this.model_id + \"_x\");\n }\n else {\n x_scale.del_domain([], this.model_id + \"_x\");\n }\n if (!this.get(\"preserve_domain\").y) {\n y_scale.compute_and_set_domain(this.y_data[0].slice(0, this.data_len), this.model_id + \"_y\");\n }\n else {\n y_scale.del_domain([], this.model_id + \"_y\");\n }\n if (color_scale !== null && color_scale !== undefined) {\n if (!this.get(\"preserve_domain\").color) {\n color_scale.compute_and_set_domain(this.mark_data.map(function (elem) {\n return elem.values.map(function (d) {\n return d.color;\n });\n }), this.model_id + \"_color\");\n }\n else {\n color_scale.del_domain([], this.model_id + \"_color\");\n }\n }\n if (width_scale !== null && width_scale !== undefined) {\n if (!this.get(\"preserve_domain\").width) {\n width_scale.compute_and_set_domain(this.mark_data.map(function (elem) {\n return elem.values.map(function (d) {\n return d.size;\n });\n }), this.model_id + \"_width\");\n }\n else {\n width_scale.del_domain([], this.model_id + \"_width\");\n }\n }\n }\n}\nexports.FlexLineModel = FlexLineModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZXNNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9MaW5lc01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsc0dBQXNHO0FBQ3RHLDhDQUFnQztBQUNoQywyQ0FBd0M7QUFDeEMsdURBQXlDO0FBQ3pDLCtDQUFpQztBQUVqQyxNQUFhLFVBQVcsU0FBUSxxQkFBUztJQUVyQyxRQUFRO1FBQ0oseUJBQVcscUJBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3JDLFdBQVcsRUFBRSxZQUFZLEVBQ3pCLFVBQVUsRUFBRSxPQUFPLEVBQ25CLENBQUMsRUFBRSxFQUFFLEVBQ0wsQ0FBQyxFQUFFLEVBQUUsRUFDTCxLQUFLLEVBQUUsSUFBSSxFQUNYLGVBQWUsRUFBRTtnQkFDYixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2hELENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDOUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTthQUNoQyxFQUNELE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUNwRCxXQUFXLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFDekQsWUFBWSxFQUFFLEdBQUcsRUFDakIsaUJBQWlCLEVBQUUsTUFBTSxFQUN6QixhQUFhLEVBQUUsRUFBRSxFQUNqQixVQUFVLEVBQUUsT0FBTyxFQUNuQixhQUFhLEVBQUUsUUFBUSxFQUN2QixVQUFVLEVBQUUsS0FBSyxFQUNqQixJQUFJLEVBQUUsTUFBTSxFQUNaLE1BQU0sRUFBRSxJQUFJ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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ScatterBaseModel_1 = require(\"./ScatterBaseModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nconst _ = __importStar(require(\"underscore\"));\nclass ScatterModel extends ScatterBaseModel_1.ScatterBaseModel {\n defaults() {\n return Object.assign({}, ScatterBaseModel_1.ScatterBaseModel.prototype.defaults(), { _model_name: \"ScatterModel\", _view_name: \"Scatter\", skew: null, marker: \"circle\", stroke: null, stroke_width: 1.5, default_skew: 0.5, default_size: 64, names: [], display_names: true, fill: true, drag_color: null, drag_size: 5.0, names_unique: true });\n }\n initialize(attributes, options) {\n // TODO: Normally, color, opacity and size should not require a redraw\n super.initialize(attributes, options);\n this.on(\"change:skew\", this.update_data, this);\n this.on_some_change([\"names\", \"names_unique\"], function () {\n this.update_unique_ids();\n this.trigger(\"data_updated\");\n }, this);\n }\n update_mark_data() {\n super.update_mark_data();\n const skew = this.get(\"skew\") || [];\n this.mark_data.forEach(function (d, i) { d.skew = skew[i]; });\n }\n update_unique_ids() {\n let names = this.get(\"names\");\n const show_labels = (names != null && names.length !== 0);\n names = (show_labels) ? names : this.mark_data.map(function (data, index) {\n return \"Dot\" + index;\n });\n let unique_ids = [];\n if (this.get(\"names_unique\")) {\n unique_ids = names.slice(0);\n }\n else {\n unique_ids = _.range(this.mark_data.length);\n }\n this.mark_data.forEach(function (data, index) {\n data.name = names[index];\n data.unique_id = unique_ids[index];\n });\n }\n}\nScatterModel.serializers = Object.assign({}, ScatterBaseModel_1.ScatterBaseModel.serializers, { skew: serialize.array_or_json, names: serialize.array_or_json });\nexports.ScatterModel = ScatterModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlck1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjYXR0ZXJNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgseURBQXFEO0FBQ3JELHVEQUF5QztBQUN6Qyw4Q0FBZ0M7QUFFaEMsTUFBYSxZQUFhLFNBQVEsbUNBQWdCO0lBRTlDLFFBQVE7UUFDSix5QkFBVyxtQ0FBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQzVDLFdBQVcsRUFBRSxjQUFjLEVBQzNCLFVBQVUsRUFBRSxTQUFTLEVBQ3JCLElBQUksRUFBRSxJQUFJLEVBQ1YsTUFBTSxFQUFFLFFBQVEsRUFDaEIsTUFBTSxFQUFFLElBQUksRUFDWixZQUFZLEVBQUUsR0FBRyxFQUNqQixZQUFZLEVBQUUsR0FBRyxFQUNqQixZQUFZLEVBQUUsRUFBRSxFQUNoQixLQUFLLEVBQUUsRUFBRSxFQUNULGFBQWEsRUFBRSxJQUFJLEVBQ25CLElBQUksRUFBRSxJQUFJLEVBQ1YsVUFBVSxFQUFFLElBQUksRUFDaEIsU0FBUyxFQUFFLEdBQUcsRUFDZCxZQUFZLEVBQUUsSUFBSSxJQUNwQjtJQUNOLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDMUIsc0VBQXNFO1FBQ3RFLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVwQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFTLENBQUMsRUFBRSxDQUFDLElBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRCxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFTLElBQUksRUFBRSxLQUFLO1lBQ25FLE9BQU8sS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDekIsVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0I7YUFBTTtZQUNILFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0M7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFTLElBQUksRUFBRSxLQUFLO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7QUFFTSx3QkFBVyxxQkFDWCxtQ0FBZ0IsQ0FBQyxXQUFXLElBQy9CLElBQUksRUFBRSxTQUFTLENBQUMsYUFBYSxFQUM3QixLQUFLLEVBQUUsU0FBUyxDQUFDLGFBQWEsSUFDakM7QUE3REwsb0NBOERDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _ = __importStar(require(\"underscore\"));\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-selection\"), require(\"d3-selection-multi\"));\nconst Selector_1 = require(\"./Selector\");\nconst sel_utils = __importStar(require(\"./selector_utils\"));\nclass FastIntervalSelector extends Selector_1.BaseXSelector {\n render() {\n super.render();\n this.freeze_but_move = true;\n this.freeze_dont_move = false;\n this.active = false;\n this.dirty = false;\n this.size = this.model.get(\"size\");\n this.width = this.parent.width - this.parent.margin.left - this.parent.margin.right;\n this.height = this.parent.height - this.parent.margin.top - this.parent.margin.bottom;\n const that = this;\n const scale_creation_promise = this.create_scales();\n Promise.all([this.mark_views_promise, scale_creation_promise]).then(function () {\n //container for mouse events\n that.background = that.d3el.append(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", that.width)\n .attr(\"height\", that.height)\n .attr(\"class\", \"selector selectormouse\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"visibility\", \"hidden\");\n that.background.on(\"mousemove\", _.bind(that.mousemove, that))\n .on(\"click\", _.bind(that.click, that))\n .on(\"dblclick\", _.bind(that.dblclick, that));\n that.rect = that.d3el.append(\"rect\")\n .attr(\"class\", \"selector intsel\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", that.size)\n .attr(\"height\", that.height)\n .attr(\"pointer-events\", \"none\")\n .attr(\"display\", \"none\");\n that.color_change();\n that.selected_changed();\n that.create_listeners();\n });\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:color\", this.color_change);\n }\n color_change() {\n if (this.model.get(\"color\") !== null) {\n this.rect.style(\"fill\", this.model.get(\"color\"));\n }\n }\n click() {\n this.active = true;\n this.rect.style(\"display\", \"inline\");\n this.freeze_but_move = this.model.get(\"size\") ?\n true : !this.freeze_but_move;\n }\n dblclick() {\n this.freeze_dont_move = !this.freeze_dont_move;\n }\n mousemove() {\n if (this.freeze_dont_move || !this.active) {\n return;\n }\n this.dirty = true;\n const mouse_pos = d3.mouse(this.background.node());\n const int_len = this.size > 0 ?\n this.size : parseInt(this.rect.attr(\"width\"));\n const vert_factor = (this.height - mouse_pos[1]) / this.height;\n const interval_size = this.freeze_but_move ?\n int_len : Math.round(vert_factor * this.width);\n let start;\n if (mouse_pos[0] - interval_size / 2 < 0) {\n start = 0;\n }\n else if ((mouse_pos[0] + interval_size / 2) > this.width) {\n start = this.width - interval_size;\n }\n else {\n start = mouse_pos[0] - interval_size / 2;\n }\n //update the interval location and size\n this.rect.attr(\"x\", start);\n this.rect.attr(\"width\", interval_size);\n const pixel_extent = [start, start + interval_size];\n this.set_selected(\"selected\", this.scale.invert_range(pixel_extent));\n this.update_mark_selected(pixel_extent, undefined);\n this.touch();\n this.dirty = false;\n }\n update_mark_selected(extent_x, extent_y) {\n if (extent_x === undefined || extent_x.length === 0) {\n // Reset all the selected in marks\n _.each(this.mark_views, function (mark_view) {\n return mark_view.selector_changed();\n });\n }\n let x, y;\n if (extent_y === undefined) {\n // 1d brush\n const orient = this.model.get(\"orientation\");\n x = (orient == \"vertical\") ? [] : extent_x,\n y = (orient == \"vertical\") ? extent_x : [];\n }\n else {\n // 2d brush\n x = extent_x, y = extent_y;\n }\n const point_selector = function (p) {\n return sel_utils.point_in_rectangle(p, x, y);\n };\n const rect_selector = function (xy) {\n return sel_utils.rect_inter_rect(xy[0], xy[1], x, y);\n };\n _.each(this.mark_views, function (mark_view) {\n mark_view.selector_changed(point_selector, rect_selector);\n }, this);\n }\n relayout() {\n super.relayout();\n this.adjust_rectangle();\n this.background\n .attr(\"width\", this.width)\n .attr(\"height\", this.height);\n this.set_range([this.scale]);\n }\n reset() {\n this.rect.attr(\"x\", 0)\n .attr(\"width\", 0);\n this.model.set(\"selected\", null);\n this.update_mark_selected(undefined, undefined);\n this.touch();\n }\n update_scale_domain(ignore_gui_update) {\n // Call the base class function to update the scale.\n super.update_scale_domain();\n if (ignore_gui_update !== true) {\n this.selected_changed();\n }\n }\n selected_changed() {\n //TODO: should the size get overridden if it was set previously and\n //then selected was changed from the python side?\n if (this.dirty) {\n //this change was most probably triggered from the js side and\n //should be ignored.\n return;\n }\n //reposition the interval selector and set the selected attribute.\n const selected = this.model.get(\"selected\") || [];\n if (selected.length === 0) {\n this.reset();\n }\n else if (selected.length != 2) {\n // invalid value for selected. Ignoring the value\n return;\n }\n else {\n let pixels = selected.map(this.scale.scale);\n pixels = pixels.sort(function (a, b) { return a - b; });\n this.rect.attrs({\n x: pixels[0],\n width: (pixels[1] - pixels[0])\n }).style(\"display\", \"inline\");\n this.active = true;\n this.update_mark_selected(pixels, undefined);\n }\n }\n adjust_rectangle() {\n if (this.model.get(\"orientation\") == \"vertical\") {\n this.d3el.selectAll(\"rect\")\n .attr(\"x\", 0)\n .attr(\"width\", this.width);\n }\n else {\n this.d3el.selectAll(\"rect\")\n .attr(\"y\", 0)\n .attr(\"height\", this.height);\n }\n }\n}\nexports.FastIntervalSelector = FastIntervalSelector;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFzdEludGVydmFsU2VsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRmFzdEludGVydmFsU2VsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILDhDQUFnQztBQUNoQyx1Q0FBeUI7QUFDekIscUZBQXFGO0FBQ3JGLHlDQUEyQztBQUMzQyw0REFBOEM7QUFFOUMsTUFBYSxvQkFBcUIsU0FBUSx3QkFBYTtJQUVuRCxNQUFNO1FBQ0YsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNwRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFdEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-scale\"));\nconst LinearScale_1 = require(\"./LinearScale\");\nclass LogScale extends LinearScale_1.LinearScale {\n render() {\n this.scale = d3.scaleLog();\n if (this.model.domain.length > 0) {\n this.scale.domain(this.model.domain);\n }\n this.offset = 0;\n this.create_event_listeners();\n }\n}\nexports.LogScale = LogScale;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nU2NhbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTG9nU2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QixrREFBa0Q7QUFDbEQsK0NBQTRDO0FBRTVDLE1BQWEsUUFBUyxTQUFRLHlCQUFXO0lBQ3JDLE1BQU07UUFDRixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDSjtBQVRELDRCQVNDIn0=","export default \"float scale_transform_linear(float domain_value, vec2 range, vec2 domain) {\\n float normalized = (domain_value - domain[0]) / (domain[1] - domain[0]);\\n float range_value = normalized * (range[1] - range[0]) + range[0];\\n return range_value;\\n}\\n\\nfloat scale_transform_linear_inverse(float range_value, vec2 range, vec2 domain) {\\n float normalized = (range_value - range[0]) / (range[1] - range[0]);\\n float domain_value = normalized * (domain[1] - domain[0]) + domain[0];\\n return domain_value;\\n}\\n\\nfloat scale_transform_log(float domain_value, vec2 range, vec2 domain) {\\n float normalized = (log(domain_value) - log(domain[0])) / (log(domain[1]) - log(domain[0]));\\n float range_value = normalized * (range[1] - range[0]) + range[0];\\n return range_value;\\n}\\n\\nfloat scale_transform_log_inverse(float range_value, vec2 range, vec2 domain) {\\n float normalized = (range_value - range[0]) / (range[1] - range[0]);\\n float domain_value = exp(normalized * (log(domain[1]) - log(domain[0])) + log(domain[0]));\\n return domain_value;\\n}\"","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LinearScaleModel_1 = require(\"./LinearScaleModel\");\nclass LogScaleModel extends LinearScaleModel_1.LinearScaleModel {\n defaults() {\n return Object.assign({}, LinearScaleModel_1.LinearScaleModel.prototype.defaults(), { _model_name: \"LogScaleModel\", _view_name: \"LogScale\", domain: [] });\n }\n set_init_state() {\n this.type = \"log\";\n this.global_min = Number.MIN_VALUE;\n this.global_max = Number.POSITIVE_INFINITY;\n }\n}\nexports.LogScaleModel = LogScaleModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nU2NhbGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Mb2dTY2FsZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUVILHlEQUFzRDtBQUV0RCxNQUFhLGFBQWMsU0FBUSxtQ0FBZ0I7SUFFL0MsUUFBUTtRQUNKLHlCQUFXLG1DQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFDNUMsV0FBVyxFQUFFLGVBQWUsRUFDNUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsTUFBTSxFQUFFLEVBQUUsSUFDWjtJQUNOLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQy9DLENBQUM7Q0FDSjtBQWZELHNDQWVDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst version_1 = require(\"./version\");\nclass FigureModel extends widgets.DOMWidgetModel {\n defaults() {\n return Object.assign({}, widgets.DOMWidgetModel.prototype.defaults(), { _model_name: \"FigureModel\", _view_name: \"Figure\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, title: \"\", axes: [], marks: [], interaction: null, scale_x: undefined, scale_y: undefined, title_style: {}, background_style: {}, legend_style: {}, legend_text: {}, theme: \"classic\", min_aspect_ratio: 0.01, max_aspect_ratio: 100, pixel_ratio: null, fig_margin: {\n top: 60,\n bottom: 60,\n left: 60,\n right: 60\n }, padding_x: 0.0, padding_y: 0.025, legend_location: \"top-right\", animation_duration: 0 });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on(\"msg:custom\", this.handle_custom_messages, this);\n }\n handle_custom_messages(msg) {\n if (msg.type === 'save_png') {\n this.trigger(\"save_png\", msg.filename, msg.scale);\n }\n else if (msg.type === 'save_svg') {\n this.trigger(\"save_svg\", msg.filename);\n }\n }\n save_png() {\n // TODO: Any view of this Figure model will pick up this event\n // and render a png. Remove this eventually.\n this.trigger(\"save_png\");\n }\n}\nFigureModel.serializers = Object.assign({}, widgets.DOMWidgetModel.serializers, { marks: { deserialize: widgets.unpack_models }, axes: { deserialize: widgets.unpack_models }, interaction: { deserialize: widgets.unpack_models }, scale_x: { deserialize: widgets.unpack_models }, scale_y: { deserialize: widgets.unpack_models }, layout: { deserialize: widgets.unpack_models } });\nexports.FigureModel = FigureModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlndXJlTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRmlndXJlTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILCtEQUFpRDtBQUNqRCx1Q0FBeUM7QUFFekMsTUFDTSxXQUFZLFNBQVEsT0FBTyxDQUFDLGNBQWM7SUFFNUMsUUFBUTtRQUNKLHlCQUFXLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUNsRCxXQUFXLEVBQUUsYUFBYSxFQUMxQixVQUFVLEVBQUUsUUFBUSxFQUNwQixhQUFhLEVBQUUsUUFBUSxFQUN2QixZQUFZLEVBQUUsUUFBUSxFQUN0QixxQkFBcUIsRUFBRSxzQkFBWSxFQUNuQyxvQkFBb0IsRUFBRSxzQkFBWSxFQUVsQyxLQUFLLEVBQUUsRUFBRSxFQUNULElBQUksRUFBRSxFQUFFLEVBQ1IsS0FBSyxFQUFFLEVBQUUsRUFDVCxXQUFXLEVBQUUsSUFBSSxFQUNqQixPQUFPLEVBQUUsU0FBUyxFQUNsQixPQUFPLEVBQUUsU0FBUyxFQUNsQixXQUFXLEVBQUUsRUFBRSxFQUNmLGdCQUFnQixFQUFFLEVBQUUsRUFDcEIsWUFBWSxFQUFFLEVBQUUsRUFDaEIsV0FBVyxFQUFFLEVBQUUsRUFDZixLQUFLLEVBQUUsU0FBUyxFQUVoQixnQkFBZ0IsRUFBRSxJQUFJLEVBQ3RCLGdCQUFnQixFQUFFLEdBQUcsRUFDckIsV0FBVyxFQUFFLElBQUksRUFFakIsVUFBVSxFQUFFO2dCQUNSLEdBQUcsRUFBRSxFQUFFO2dCQUNQLE1BQU0sRUFBRSxFQUFFO2dCQUNWLElBQUksRUFBRSxFQUFFO2dCQUNSLEtBQUssRUFBRSxFQUFFO2FBQ1osRUFFRCxTQUFTLEVBQUUsR0FBRyxFQUNkLFNBQVMsRUFBRSxLQUFLLEVBQ2hCLGVBQWUsRUFBRSxXQUFXLEVBQzVCLGtCQUFrQixFQUFFLENBQUMsSUFDdkI7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPO1FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsR0FBRztRQUN0QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JEO2FBQ0ksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDMUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLDhEQUE4RDtRQUM5RCw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QixDQUFDOztBQUNNLHVCQUFXLHFCQUNYLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxJQUNyQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUM3QyxJQUFJLEVBQUcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUM3QyxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUNuRCxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUMvQyxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUMvQyxNQUFNLEVBQUcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUNqRDtBQXJFTixrQ0FzRUMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-selection\"), require(\"d3-zoom\"));\nconst d3GetEvent = () => { return require(\"d3-selection\").event; };\nconst Mark_1 = require(\"./Mark\");\nclass Map extends Mark_1.Mark {\n render() {\n const base_render_promise = super.render();\n this.map = this.d3el.append(\"svg\")\n .attr(\"viewBox\", \"0 0 1200 980\");\n this.width = this.parent.plotarea_width;\n this.height = this.parent.plotarea_height;\n this.map_id = widgets.uuid();\n this.enable_hover = this.model.get(\"enable_hover\");\n this.display_el_classes = [\"event_layer\"];\n this.displayed.then(() => {\n this.parent.tooltip_div.node().appendChild(this.tooltip_div.node());\n this.create_tooltip();\n });\n return base_render_promise.then(() => {\n this.event_listeners = {};\n this.process_interactions();\n this.create_listeners();\n this.draw();\n });\n }\n set_ranges() {\n }\n set_positional_scales() {\n const geo_scale = this.scales.projection;\n this.listenTo(geo_scale, \"domain_changed\", () => {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n }\n initialize_additional_scales() {\n const color_scale = this.scales.color;\n if (color_scale) {\n this.listenTo(color_scale, \"domain_changed\", () => {\n this.update_style();\n });\n color_scale.on(\"color_scale_range_changed\", this.update_style, this);\n }\n }\n remove_map() {\n d3.selectAll(\".world_map.map\" + this.map_id).remove();\n }\n draw() {\n this.set_ranges();\n this.remove_map();\n this.transformed_g = this.map.append(\"g\")\n .attr(\"class\", \"world_map map\" + this.map_id);\n this.fill_g = this.transformed_g.append(\"g\");\n this.highlight_g = this.transformed_g.append(\"g\");\n this.stroke_g = this.transformed_g.append(\"g\");\n const projection = this.scales.projection;\n //Bind data and create one path per GeoJSON feature\n this.fill_g.selectAll(\"path\")\n .data(this.model.geodata)\n .enter()\n .append(\"path\")\n .attr(\"d\", projection.path)\n .style(\"fill\", (d, i) => {\n return this.fill_g_colorfill(d, i);\n });\n this.stroke_g.selectAll(\"path\")\n .data(this.model.geodata)\n .enter()\n .append(\"path\")\n .attr(\"class\", \"event_layer\")\n .attr(\"d\", projection.path)\n .style(\"fill-opacity\", 0.0)\n .on(\"click\", (d, i) => {\n return this.event_dispatcher(\"element_clicked\", { \"data\": d, \"index\": i });\n });\n if (this.validate_color(this.model.get(\"stroke_color\"))) {\n this.stroke_g.selectAll(\"path\")\n .style(\"stroke\", this.model.get(\"stroke_color\"));\n }\n this.zoom = d3.zoom()\n .scaleExtent([1, 8])\n .on(\"zoom\", () => {\n this.zoomed(this);\n });\n this.parent.bg_events.call(this.zoom);\n this.parent.bg_events.on(\"dblclick.zoom\", null);\n this.parent.bg_events.on(\"dblclick\", () => {\n this.reset_zoom(this);\n });\n }\n validate_color(color) {\n return color !== \"\";\n }\n mouseover_handler() {\n if (!this.model.get(\"hover_highlight\")) {\n return;\n }\n const el = d3.select(d3GetEvent().target);\n if (this.is_hover_element(el)) {\n const data = el.data()[0];\n const idx = this.model.get(\"selected\") || [];\n const select = Array.from(idx);\n const node = this.highlight_g.append(() => {\n return el.node().cloneNode(true);\n });\n node.classed(\"hovered\", true);\n node.classed(\"event_layer\", false);\n if (this.validate_color(this.model.get(\"hovered_styles\").hovered_stroke) &&\n select.indexOf(data.id) === -1) {\n node.style(\"stroke\", this.model.get(\"hovered_styles\").hovered_stroke)\n .style(\"stroke-width\", this.model.get(\"hovered_styles\").hovered_stroke_width);\n }\n if (this.validate_color(this.model.get(\"hovered_styles\").hovered_fill) &&\n select.indexOf(data.id) === -1) {\n node.style(\"fill-opacity\", 1.0)\n .style(\"fill\", () => {\n return this.model.get(\"hovered_styles\").hovered_fill;\n });\n }\n }\n }\n mouseout_handler() {\n if (!this.model.get(\"hover_highlight\")) {\n return;\n }\n const el = d3.select(d3GetEvent().target);\n if (this.is_hover_element(el)) {\n el.transition(\"mouseout_handler\")\n .style(\"fill\", (d, i) => {\n return this.fill_g_colorfill(d, i);\n })\n .style(\"stroke\", (d, i) => {\n return this.hoverfill(d, i);\n });\n this.highlight_g.selectAll(\".hovered\").remove();\n }\n }\n click_handler() {\n const el = d3.select(d3GetEvent().target);\n if (this.is_hover_element(el)) {\n const data = el.data()[0];\n const idx = this.model.get(\"selected\") || [];\n const selected = Array.from(idx);\n const elem_index = selected.indexOf(data.id);\n if (elem_index > -1) {\n selected.splice(elem_index, 1);\n el.transition(\"click_handler\")\n .style(\"fill-opacity\", 0.0);\n this.highlight_g.selectAll(\".hovered\").remove();\n const choice = \"#c\".concat(data.id.toString());\n d3.select(choice).remove();\n }\n else {\n this.highlight_g.selectAll(\".hovered\").remove();\n this.highlight_g.append(() => {\n return el.node().cloneNode(true);\n })\n .attr(\"id\", \"c\" + data.id)\n .classed(\"selected\", true)\n .classed(\"event_layer\", false);\n if (this.validate_color(this.model.get(\"selected_styles\").selected_fill)) {\n this.highlight_g.selectAll(\".selected\")\n .style(\"fill-opacity\", 1.0)\n .style(\"fill\", this.model.get(\"selected_styles\").selected_fill);\n }\n if (this.validate_color(this.model.get(\"selected_styles\").selected_stroke)) {\n this.highlight_g.selectAll(\".selected\")\n .style(\"stroke\", this.model.get(\"selected_styles\").selected_stroke)\n .style(\"stroke-width\", this.model.get(\"selected_styles\").selected_stroke_width);\n }\n selected.push(data.id);\n this.model.set(\"selected\", selected);\n this.touch();\n }\n this.model.set(\"selected\", ((selected.length === 0) ? null : selected), { updated_view: this });\n this.touch();\n }\n }\n reset_zoom(that) {\n that.zoom.transform(that.parent.bg, d3.zoomIdentity);\n }\n zoomed(that) {\n const tr = d3GetEvent().transform;\n const h = that.height / 3;\n const w = 2 * that.width;\n tr.x = Math.min(that.width / 2 * (tr.k - 1), Math.max(w / 2 * (1 - tr.k), tr.x));\n tr.y = Math.min(that.height / 2 * (tr.k - 1) + this.height * tr.k, Math.max(h / 2 * (1 - tr.k) - that.width * tr.k, tr.y));\n that.transformed_g.style(\"stroke-width\", 1 / tr.k)\n .attr(\"transform\", tr);\n }\n create_listeners() {\n this.d3el.on(\"mouseover\", () => { this.event_dispatcher(\"mouse_over\"); })\n .on(\"mousemove\", () => { this.event_dispatcher(\"mouse_move\"); })\n .on(\"mouseout\", () => { this.event_dispatcher(\"mouse_out\"); });\n this.listenTo(this.model, \"data_updated\", this.draw);\n this.listenTo(this.model, \"change:color\", this.update_style);\n this.listenTo(this.model, \"change:stroke_color\", this.change_stroke_color);\n this.listenTo(this.model, \"change:colors\", this.change_map_color);\n this.listenTo(this.model, \"change:selected\", this.change_selected);\n this.listenTo(this.model, \"change:selected_styles\", () => {\n this.change_selected_fill();\n this.change_selected_stroke();\n });\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n this.listenTo(this.parent, \"bg_clicked\", () => {\n this.event_dispatcher(\"parent_clicked\");\n });\n }\n process_click(interaction) {\n super.process_click(interaction);\n if (interaction === \"select\") {\n this.event_listeners.parent_clicked = this.reset_selection;\n this.event_listeners.element_clicked = this.click_handler;\n }\n }\n process_hover(interaction) {\n super.process_hover(interaction);\n if (interaction === \"tooltip\") {\n this.event_listeners.mouse_over = () => {\n this.mouseover_handler();\n return this.refresh_tooltip();\n };\n this.event_listeners.mouse_move = this.move_tooltip;\n this.event_listeners.mouse_out = () => {\n this.mouseout_handler();\n return this.hide_tooltip();\n };\n }\n }\n change_selected_fill() {\n if (!this.validate_color(this.model.get(\"selected_styles\").selected_fill)) {\n this.highlight_g.selectAll(\".selected\")\n .style(\"fill-opacity\", 0.0);\n }\n else {\n this.highlight_g.selectAll(\".selected\")\n .style(\"fill-opacity\", 1.0)\n .style(\"fill\", this.model.get(\"selected_styles\").selected_fill);\n }\n }\n change_selected_stroke() {\n if (!this.validate_color(this.model.get(\"selected_styles\").selected_stroke)) {\n this.highlight_g.selectAll(\".selected\")\n .style(\"stroke-width\", 0.0);\n }\n else {\n this.highlight_g.selectAll(\".selected\")\n .style(\"stroke-width\", this.model.get(\"selected_styles\").selected_stroke_width)\n .style(\"stroke\", this.model.get(\"selected_styles\").selected_stroke);\n }\n }\n change_selected() {\n this.highlight_g.selectAll(\"path\").remove();\n const idx = this.model.get(\"selected\");\n const select = idx ? idx : [];\n const temp = this.stroke_g.selectAll(\"path\").data();\n this.stroke_g.selectAll(\"path\").style(\"stroke\", (d, i) => {\n return this.hoverfill(d, i);\n });\n const nodes = this.stroke_g.selectAll(\"path\");\n for (let i = 0; i < temp.length; i++) {\n if (select.indexOf(temp[i].id) > -1) {\n this.highlight_g.append(() => {\n return nodes.nodes()[i].cloneNode(true);\n }).attr(\"id\", temp[i].id)\n .style(\"fill-opacity\", () => {\n if (this.validate_color(this.model.get(\"selected_styles\").selected_fill)) {\n return 1.0;\n }\n else {\n return 0.0;\n }\n })\n .style(\"fill\", this.model.get(\"selected_styles\").selected_fill)\n .style(\"stroke-opacity\", () => {\n if (this.validate_color(this.model.get(\"selected_styles\").selected_stroke)) {\n return 1.0;\n }\n else {\n return 0.0;\n }\n })\n .style(\"stroke\", this.model.get(\"selected_styles\").selected_stroke)\n .style(\"stroke-width\", this.model.get(\"selected_styles\").selected_stroke_width)\n .classed(\"selected\", true);\n }\n }\n }\n reset_selection() {\n this.model.set(\"selected\", []);\n this.touch();\n this.highlight_g.selectAll(\".selected\").remove();\n d3.select(this.d3el.parentNode)\n .selectAll(\"path\")\n .classed(\"selected\", false);\n d3.select(this.d3el.parentNode)\n .selectAll(\"path\")\n .classed(\"hovered\", false);\n this.stroke_g.selectAll(\"path\").style(\"stroke\", (d, i) => {\n return this.hoverfill(d, i);\n });\n this.fill_g.selectAll(\"path\").classed(\"selected\", false)\n .style(\"fill\", (d, i) => {\n return this.fill_g_colorfill(d, i);\n });\n }\n change_stroke_color() {\n this.stroke_g.selectAll(\"path\")\n .style(\"stroke\", this.model.get(\"stroke_color\"));\n }\n change_map_color() {\n if (!this.is_object_empty(this.model.get(\"color\"))) {\n return;\n }\n this.fill_g.selectAll(\"path\").style(\"fill\", (d, i) => {\n return this.fill_g_colorfill(d, i);\n });\n }\n update_style() {\n const color_data = this.model.get(\"color\");\n if (!this.is_object_empty(color_data)) {\n this.fill_g.selectAll(\"path\").style(\"fill\", (d, i) => {\n return this.fill_g_colorfill(d, i);\n });\n }\n }\n is_object_empty(object) {\n return Object.keys(object).length === 0 && object.constructor === Object;\n }\n hoverfill(d, j) {\n const idx = this.model.get(\"selected\");\n const select = idx ? idx : [];\n if (select.indexOf(d.id) > -1 &&\n this.validate_color(this.model.get(\"selected_styles\").selected_stroke)) {\n return this.model.get(\"selected_styles\").selected_stroke;\n }\n else {\n return this.model.get(\"stroke_color\");\n }\n }\n fill_g_colorfill(d, j) {\n const color_scale = this.scales.color;\n const idx = this.model.get(\"selected\");\n const selection = idx ? idx : [];\n const color_data = this.model.get(\"color\");\n const colors = this.model.get(\"colors\");\n if (selection.indexOf(d.id) > -1) {\n return this.model.get(\"selected_styles\").selected_fill;\n }\n else if (this.is_object_empty(color_data)) {\n return colors[d.id] || colors.default_color;\n }\n else if (color_data[d.id] === undefined ||\n color_data[d.id] === null ||\n color_data[d.id] === \"nan\" ||\n color_scale === undefined) {\n return colors.default_color;\n }\n else {\n return color_scale.scale(color_data[d.id]);\n }\n }\n clear_style() { }\n compute_view_padding() { }\n set_default_style() { }\n set_style_on_elements() { }\n}\nexports.Map = Map;\n;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsK0RBQWlEO0FBQ2pELHVDQUF5QjtBQUN6QiwwRUFBMEU7QUFDMUUsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFLEdBQUcsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLGlDQUE4QjtBQUc5QixNQUFhLEdBQUksU0FBUSxXQUFJO0lBRXpCLE1BQU07UUFDRixNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUM3QixJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLElBQUks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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst base_1 = require(\"@jupyter-widgets/base\");\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-selection\"), require(\"d3-format\"), require(\"d3-time-format\"));\nconst utils = __importStar(require(\"./utils\"));\nconst _ = __importStar(require(\"underscore\"));\nclass Tooltip extends base_1.DOMWidgetView {\n initialize() {\n this.d3el = d3.select(this.el);\n super.initialize.apply(this, arguments);\n }\n render() {\n this.parent = this.options.parent;\n this.update_formats();\n this.create_listeners();\n this.create_table();\n }\n create_listeners() {\n this.listenTo(this.parent, \"update_tooltip\", this.update_tooltip);\n this.model.on_some_change([\"fields\", \"show_labels\", \"labels\"], this.create_table, this);\n this.listenTo(this.model, \"change:formats\", this.update_formats);\n }\n update_formats() {\n const fields = this.model.get(\"fields\");\n const formats = this.model.get(\"formats\");\n this.tooltip_formats = fields.map(function (field, index) {\n const fmt = formats[index];\n if (fmt === undefined || fmt === \"\") {\n return function (d) { return d; };\n }\n else {\n if (utils.is_valid_time_format(fmt)) {\n return d3.timeFormat(fmt);\n }\n else {\n return d3.format(fmt);\n }\n }\n });\n }\n update_tooltip(data) {\n //data is a dictionary passed by the parent along with the update_\n //tooltip event. Responsibility of the mark to pass the data\n const that = this;\n this.d3el.select(\"table\")\n .selectAll(\"tr\")\n .select(\".datavalue\")\n .text((datum, index) => that.tooltip_formats[index](data[datum]));\n }\n create_table() {\n const fields = this.model.get(\"fields\");\n const labels = _.clone(this.model.get(\"labels\"));\n for (let ind = labels.length; ind < fields.length; ind++) {\n labels[ind] = fields[ind];\n }\n this.d3el.select(\"table\").remove();\n const tooltip_table = this.d3el.append(\"table\")\n .selectAll(\"tr\").data(fields);\n tooltip_table.exit().remove();\n const table_rows = tooltip_table.enter().append(\"tr\")\n .attr(\"class\", \"datarow\");\n if (this.model.get(\"show_labels\")) {\n table_rows.append(\"td\")\n .text((datum, index) => labels[index])\n .attr(\"class\", \"tooltiptext datafield\");\n }\n table_rows.append(\"td\")\n .attr(\"class\", \"tooltiptext datavalue\");\n this.update_formats();\n }\n}\nexports.Tooltip = Tooltip;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ub29sdGlwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCxnREFBb0Q7QUFDcEQsdUNBQXlCO0FBQ3pCLHVHQUF1RztBQUN2RywrQ0FBaUM7QUFDakMsOENBQWdDO0FBRWhDLE1BQWEsT0FBUSxTQUFRLG9CQUFhO0lBQ3RDLFVBQVU7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxjQUFjO1FBQ1YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxH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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst base_1 = require(\"@jupyter-widgets/base\");\nconst version_1 = require(\"./version\");\nclass TooltipModel extends base_1.DOMWidgetModel {\n defaults() {\n return Object.assign({}, base_1.DOMWidgetModel.prototype.defaults(), { _model_name: \"TooltipModel\", _view_name: \"Tooltip\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, fields: [], formats: [], show_labels: true, labels: [] });\n }\n}\nexports.TooltipModel = TooltipModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbHRpcE1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1Rvb2x0aXBNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7QUFFSCxnREFBdUQ7QUFDdkQsdUNBQXlDO0FBRXpDLE1BQWEsWUFBYSxTQUFRLHFCQUFjO0lBQzVDLFFBQVE7UUFDSix5QkFBVyxxQkFBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFDMUMsV0FBVyxFQUFFLGNBQWMsRUFDM0IsVUFBVSxFQUFFLFNBQVMsRUFDckIsYUFBYSxFQUFFLFFBQVEsRUFDdkIsWUFBWSxFQUFFLFFBQVEsRUFDdEIscUJBQXFCLEVBQUUsc0JBQVksRUFDbkMsb0JBQW9CLEVBQUUsc0JBQVksRUFFbEMsTUFBTSxFQUFFLEVBQUUsRUFDVixPQUFPLEVBQUUsRUFBRSxFQUNYLFdBQVcsRUFBRSxJQUFJLEVBQ2pCLE1BQU0sRUFBRSxFQUFFLElBQ1o7SUFDTixDQUFDO0NBQ0o7QUFoQkQsb0NBZ0JDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-selection\"));\nconst Lines_1 = require(\"./Lines\");\nclass FlexLine extends Lines_1.Lines {\n render() {\n const base_render_promise = super.render.apply(this);\n const that = this;\n return base_render_promise.then(function () {\n that.create_listeners();\n that.draw();\n });\n }\n set_ranges() {\n super.set_ranges();\n const width_scale = this.scales.width;\n if (width_scale) {\n width_scale.set_range([0.5, this.model.get(\"stroke_width\")]);\n }\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:labels_visibility\", this.update_legend_labels);\n }\n draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) {\n const g_elements = elem.selectAll(\".legend\" + this.uuid)\n .data(this.model.mark_data, function (d, i) { return d.name; });\n const that = this;\n const rect_dim = inter_y_disp * 0.8;\n g_elements.enter().append(\"g\")\n .attr(\"class\", \"legend\" + this.uuid)\n .attr(\"transform\", function (d, i) {\n return \"translate(0, \" + (i * inter_y_disp + y_disp) + \")\";\n })\n .append(\"line\")\n .style(\"stroke\", function (d, i) { return that.get_colors(i); })\n .attr(\"x1\", 0)\n .attr(\"x2\", rect_dim)\n .attr(\"y1\", rect_dim / 2)\n .attr(\"y2\", rect_dim / 2);\n g_elements.append(\"text\")\n .attr(\"class\", \"legendtext\")\n .attr(\"x\", rect_dim * 1.2)\n .attr(\"y\", rect_dim / 2)\n .attr(\"dy\", \"0.35em\")\n .text(function (d, i) { return that.model.get(\"labels\")[i]; })\n .style(\"fill\", function (d, i) { return that.get_colors(i); });\n const max_length = d3.max(this.model.get(\"labels\"), function (d) {\n return d.length;\n });\n g_elements.exit().remove();\n return [this.model.mark_data.length, max_length];\n }\n set_positional_scales() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n }\n initialize_additional_scales() {\n const color_scale = this.scales.color;\n if (color_scale) {\n this.listenTo(color_scale, \"domain_changed\", function () {\n this.draw();\n });\n color_scale.on(\"color_scale_range_changed\", this.draw, this);\n }\n }\n draw() {\n this.set_ranges();\n let curves_sel = this.d3el.selectAll(\".curve\")\n .data(this.model.mark_data, function (d, i) { return d.name; });\n curves_sel.exit()\n .transition(\"draw\")\n .duration(this.parent.model.get(\"animation_duration\"))\n .remove();\n curves_sel = curves_sel.enter().append(\"g\")\n .attr(\"class\", \"curve\")\n .merge(curves_sel);\n const x_scale = this.scales.x, y_scale = this.scales.y;\n const that = this;\n curves_sel.nodes().forEach(function (elem, index) {\n let lines = d3.select(elem).selectAll(\"line\")\n .data(that.model.mark_data[index].values);\n lines = lines.enter().append(\"line\").merge(lines);\n lines.attr(\"class\", \"line-elem\")\n .attr(\"x1\", function (d) { return x_scale.scale(d.x1); })\n .attr(\"x2\", function (d) { return x_scale.scale(d.x2); })\n .attr(\"y1\", function (d) { return y_scale.scale(d.y1); })\n .attr(\"y2\", function (d) { return y_scale.scale(d.y2); })\n .attr(\"stroke\", function (d) { return that.get_element_color(d); })\n .attr(\"stroke-width\", function (d) { return that.get_element_width(d); });\n });\n }\n get_element_color(d) {\n const color_scale = this.scales.color;\n if (color_scale !== undefined && d.color !== undefined) {\n return color_scale.scale(d.color);\n }\n return this.model.get(\"colors\")[0];\n }\n get_element_width(d) {\n const width_scale = this.scales.width;\n if (width_scale !== undefined && d.size !== undefined) {\n return width_scale.scale(d.size);\n }\n return this.model.get(\"stroke_width\");\n }\n relayout() {\n super.relayout();\n this.set_ranges();\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.d3el.selectAll(\".curve\").selectAll(\".line-elem\")\n .transition(\"relayout\")\n .duration(this.parent.model.get(\"animation_duration\"))\n .attr(\"x1\", function (d) { return x_scale.scale(d.x1); })\n .attr(\"x2\", function (d) { return x_scale.scale(d.x2); })\n .attr(\"y1\", function (d) { return y_scale.scale(d.y1); })\n .attr(\"y2\", function (d) { return y_scale.scale(d.y2); });\n }\n}\nexports.FlexLine = FlexLine;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxleExpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRmxleExpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QiwyRUFBMkU7QUFDM0UsbUNBQWdDO0FBRWhDLE1BQWEsUUFBUyxTQUFRLGFBQUs7SUFFL0IsTUFBTTtRQUNGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWxCLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVO1FBQ04sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3RDLElBQUcsV0FBVyxFQUFFO1lBQ1osV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEU7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLDBCQUEwQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVk7UUFDeEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MarkModel_1 = require(\"./MarkModel\");\nconst topojson = __importStar(require(\"topojson\"));\nclass MapModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"MapModel\", _view_name: \"Map\", color: {}, hover_highlight: true, hovered_styles: {\n hovered_fill: \"Orange\",\n hovered_stroke: null,\n hovered_stroke_width: 2.0\n }, stroke_color: null, default_color: null, scales_metadata: {\n color: { dimension: \"color\" },\n projection: { dimension: \"geo\" }\n }, selected_styles: {\n selected_fill: \"Red\",\n selected_stroke: null,\n selected_stroke_width: 2.0\n }, map_data: undefined });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on(\"change:map_data\", this.update_data, this);\n this.on(\"change:color\", this.color_data_updated, this);\n this.update_data();\n this.update_domains();\n }\n update_data() {\n this.dirty = true;\n const data = this.get(\"map_data\");\n if (data.type == 'Topology') {\n this.geodata = topojson.feature(data, data.objects.subunits).features;\n }\n else {\n this.geodata = data.features;\n }\n this.color_data_updated();\n this.dirty = false;\n this.trigger(\"data_updated\");\n }\n update_properties(d) {\n if (!d.properties) {\n d.properties = { \"color\": this.color_data[d.id] };\n }\n else {\n d.properties.color = this.color_data[d.id];\n }\n }\n color_data_updated() {\n this.update_domains();\n this.geodata.map((d) => {\n return this.update_properties(d);\n });\n }\n update_domains() {\n const scales = this.get(\"scales\");\n const color_scale = scales.color;\n this.color_data = this.get(\"color\");\n if (color_scale !== null && color_scale !== undefined) {\n if (!this.get(\"preserve_domain\").color) {\n color_scale.compute_and_set_domain(Object.keys(this.color_data).map((d) => {\n return this.color_data[d];\n }), this.model_id + \"_color\");\n }\n else {\n color_scale.del_domain([], this.model_id + \"_color\");\n }\n }\n }\n get_data_dict(data, index) {\n return Object.assign({}, data.properties, { 'id': data.id });\n }\n}\nexports.MapModel = MapModel;\n;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFwTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTWFwTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILDJDQUF3QztBQUN4QyxtREFBcUM7QUFFckMsTUFBYSxRQUFTLFNBQVEscUJBQVM7SUFFbkMsUUFBUTtRQUNKLHlCQUFXLHFCQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUNyQyxXQUFXLEVBQUUsVUFBVSxFQUN2QixVQUFVLEVBQUUsS0FBSyxFQUVqQixLQUFLLEVBQUUsRUFBRSxFQUNULGVBQWUsRUFBRSxJQUFJLEVBQ3JCLGNBQWMsRUFBRTtnQkFDWixZQUFZLEVBQUUsUUFBUTtnQkFDdEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLG9CQUFvQixFQUFFLEdBQUc7YUFDNUIsRUFFRCxZQUFZLEVBQUUsSUFBSSxFQUNsQixhQUFhLEVBQUUsSUFBSSxFQUNuQixlQUFlLEVBQUU7Z0JBQ2IsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtnQkFDN0IsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTthQUNuQyxFQUNELGVBQWUsRUFBRTtnQkFDYixhQUFhLEVBQUUsS0FBSztnQkFDcEIsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLHFCQUFxQixFQUFFLEdBQUc7YUFDN0IsRUFDRCxRQUFRLEVBQUUsU0FBUyxJQUNyQjtJQUNOLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJ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","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.topojson = global.topojson || {})));\n}(this, (function (exports) { 'use strict';\n\nfunction noop() {}\n\nfunction transformAbsolute(transform) {\n if (!transform) return noop;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(point, i) {\n if (!i) x0 = y0 = 0;\n point[0] = (x0 += point[0]) * kx + dx;\n point[1] = (y0 += point[1]) * ky + dy;\n };\n}\n\nfunction transformRelative(transform) {\n if (!transform) return noop;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(point, i) {\n if (!i) x0 = y0 = 0;\n var x1 = Math.round((point[0] - dx) / kx),\n y1 = Math.round((point[1] - dy) / ky);\n point[0] = x1 - x0;\n point[1] = y1 - y0;\n x0 = x1;\n y0 = y1;\n };\n}\n\nfunction reverse(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n\nfunction bisect(a, x) {\n var lo = 0, hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (a[mid] < x) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\nfunction feature(topology, o) {\n return o.type === \"GeometryCollection\" ? {\n type: \"FeatureCollection\",\n features: o.geometries.map(function(o) { return feature$1(topology, o); })\n } : feature$1(topology, o);\n}\n\nfunction feature$1(topology, o) {\n var f = {\n type: \"Feature\",\n id: o.id,\n properties: o.properties || {},\n geometry: object(topology, o)\n };\n if (o.id == null) delete f.id;\n return f;\n}\n\nfunction object(topology, o) {\n var absolute = transformAbsolute(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length, p; k < n; ++k) {\n points.push(p = a[k].slice());\n absolute(p, k);\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n p = p.slice();\n absolute(p, 0);\n return p;\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0].slice());\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0].slice());\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var t = o.type;\n return t === \"GeometryCollection\" ? {type: t, geometries: o.geometries.map(geometry)}\n : t in geometryType ? {type: t, coordinates: geometryType[t](o)}\n : null;\n }\n\n var geometryType = {\n Point: function(o) { return point(o.coordinates); },\n MultiPoint: function(o) { return o.coordinates.map(point); },\n LineString: function(o) { return line(o.arcs); },\n MultiLineString: function(o) { return o.arcs.map(line); },\n Polygon: function(o) { return polygon(o.arcs); },\n MultiPolygon: function(o) { return o.arcs.map(polygon); }\n };\n\n return geometry(o);\n}\n\nfunction stitchArcs(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n\nfunction mesh(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nfunction meshArcs(topology, o, filter) {\n var arcs = [];\n\n function arc(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function line(arcs) {\n arcs.forEach(arc);\n }\n\n function polygon(arcs) {\n arcs.forEach(line);\n }\n\n function geometry(o) {\n if (o.type === \"GeometryCollection\") o.geometries.forEach(geometry);\n else if (o.type in geometryType) geom = o, geometryType[o.type](o.arcs);\n }\n\n if (arguments.length > 1) {\n var geomsByArc = [],\n geom;\n\n var geometryType = {\n LineString: line,\n MultiLineString: polygon,\n Polygon: polygon,\n MultiPolygon: function(arcs) { arcs.forEach(polygon); }\n };\n\n geometry(o);\n\n geomsByArc.forEach(arguments.length < 3\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n } else {\n for (var i = 0, n = topology.arcs.length; i < n; ++i) arcs.push(i);\n }\n\n return {type: \"MultiLineString\", arcs: stitchArcs(topology, arcs)};\n}\n\nfunction cartesianTriangleArea(triangle) {\n var a = triangle[0], b = triangle[1], c = triangle[2];\n return Math.abs((a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]));\n}\n\nfunction ring(ring) {\n var i = -1,\n n = ring.length,\n a,\n b = ring[n - 1],\n area = 0;\n\n while (++i < n) {\n a = b;\n b = ring[i];\n area += a[0] * b[1] - a[1] * b[0];\n }\n\n return area / 2;\n}\n\nfunction merge(topology) {\n return object(topology, mergeArcs.apply(this, arguments));\n}\n\nfunction mergeArcs(topology, objects) {\n var polygonsByArc = {},\n polygons = [],\n components = [];\n\n objects.forEach(function(o) {\n if (o.type === \"Polygon\") register(o.arcs);\n else if (o.type === \"MultiPolygon\") o.arcs.forEach(register);\n });\n\n function register(polygon) {\n polygon.forEach(function(ring$$) {\n ring$$.forEach(function(arc) {\n (polygonsByArc[arc = arc < 0 ? ~arc : arc] || (polygonsByArc[arc] = [])).push(polygon);\n });\n });\n polygons.push(polygon);\n }\n\n function area(ring$$) {\n return Math.abs(ring(object(topology, {type: \"Polygon\", arcs: [ring$$]}).coordinates[0]));\n }\n\n polygons.forEach(function(polygon) {\n if (!polygon._) {\n var component = [],\n neighbors = [polygon];\n polygon._ = 1;\n components.push(component);\n while (polygon = neighbors.pop()) {\n component.push(polygon);\n polygon.forEach(function(ring$$) {\n ring$$.forEach(function(arc) {\n polygonsByArc[arc < 0 ? ~arc : arc].forEach(function(polygon) {\n if (!polygon._) {\n polygon._ = 1;\n neighbors.push(polygon);\n }\n });\n });\n });\n }\n }\n });\n\n polygons.forEach(function(polygon) {\n delete polygon._;\n });\n\n return {\n type: \"MultiPolygon\",\n arcs: components.map(function(polygons) {\n var arcs = [], n;\n\n // Extract the exterior (unique) arcs.\n polygons.forEach(function(polygon) {\n polygon.forEach(function(ring$$) {\n ring$$.forEach(function(arc) {\n if (polygonsByArc[arc < 0 ? ~arc : arc].length < 2) {\n arcs.push(arc);\n }\n });\n });\n });\n\n // Stitch the arcs into one or more rings.\n arcs = stitchArcs(topology, arcs);\n\n // If more than one ring is returned,\n // at most one of these rings can be the exterior;\n // choose the one with the greatest absolute area.\n if ((n = arcs.length) > 1) {\n for (var i = 1, k = area(arcs[0]), ki, t; i < n; ++i) {\n if ((ki = area(arcs[i])) > k) {\n t = arcs[0], arcs[0] = arcs[i], arcs[i] = t, k = ki;\n }\n }\n }\n\n return arcs;\n })\n };\n}\n\nfunction neighbors(objects) {\n var indexesByArc = {}, // arc index -> array of object indexes\n neighbors = objects.map(function() { return []; });\n\n function line(arcs, i) {\n arcs.forEach(function(a) {\n if (a < 0) a = ~a;\n var o = indexesByArc[a];\n if (o) o.push(i);\n else indexesByArc[a] = [i];\n });\n }\n\n function polygon(arcs, i) {\n arcs.forEach(function(arc) { line(arc, i); });\n }\n\n function geometry(o, i) {\n if (o.type === \"GeometryCollection\") o.geometries.forEach(function(o) { geometry(o, i); });\n else if (o.type in geometryType) geometryType[o.type](o.arcs, i);\n }\n\n var geometryType = {\n LineString: line,\n MultiLineString: polygon,\n Polygon: polygon,\n MultiPolygon: function(arcs, i) { arcs.forEach(function(arc) { polygon(arc, i); }); }\n };\n\n objects.forEach(geometry);\n\n for (var i in indexesByArc) {\n for (var indexes = indexesByArc[i], m = indexes.length, j = 0; j < m; ++j) {\n for (var k = j + 1; k < m; ++k) {\n var ij = indexes[j], ik = indexes[k], n;\n if ((n = neighbors[ij])[i = bisect(n, ik)] !== ik) n.splice(i, 0, ik);\n if ((n = neighbors[ik])[i = bisect(n, ij)] !== ij) n.splice(i, 0, ij);\n }\n }\n }\n\n return neighbors;\n}\n\nfunction compareArea(a, b) {\n return a[1][2] - b[1][2];\n}\n\nfunction minAreaHeap() {\n var heap = {},\n array = [],\n size = 0;\n\n heap.push = function(object) {\n up(array[object._ = size] = object, size++);\n return size;\n };\n\n heap.pop = function() {\n if (size <= 0) return;\n var removed = array[0], object;\n if (--size > 0) object = array[size], down(array[object._ = 0] = object, 0);\n return removed;\n };\n\n heap.remove = function(removed) {\n var i = removed._, object;\n if (array[i] !== removed) return; // invalid request\n if (i !== --size) object = array[size], (compareArea(object, removed) < 0 ? up : down)(array[object._ = i] = object, i);\n return i;\n };\n\n function up(object, i) {\n while (i > 0) {\n var j = ((i + 1) >> 1) - 1,\n parent = array[j];\n if (compareArea(object, parent) >= 0) break;\n array[parent._ = i] = parent;\n array[object._ = i = j] = object;\n }\n }\n\n function down(object, i) {\n while (true) {\n var r = (i + 1) << 1,\n l = r - 1,\n j = i,\n child = array[j];\n if (l < size && compareArea(array[l], child) < 0) child = array[j = l];\n if (r < size && compareArea(array[r], child) < 0) child = array[j = r];\n if (j === i) break;\n array[child._ = i] = child;\n array[object._ = i = j] = object;\n }\n }\n\n return heap;\n}\n\nfunction presimplify(topology, triangleArea) {\n var absolute = transformAbsolute(topology.transform),\n relative = transformRelative(topology.transform),\n heap = minAreaHeap();\n\n if (!triangleArea) triangleArea = cartesianTriangleArea;\n\n topology.arcs.forEach(function(arc) {\n var triangles = [],\n maxArea = 0,\n triangle,\n i,\n n,\n p;\n\n // To store each point’s effective area, we create a new array rather than\n // extending the passed-in point to workaround a Chrome/V8 bug (getting\n // stuck in smi mode). For midpoints, the initial effective area of\n // Infinity will be computed in the next step.\n for (i = 0, n = arc.length; i < n; ++i) {\n p = arc[i];\n absolute(arc[i] = [p[0], p[1], Infinity], i);\n }\n\n for (i = 1, n = arc.length - 1; i < n; ++i) {\n triangle = arc.slice(i - 1, i + 2);\n triangle[1][2] = triangleArea(triangle);\n triangles.push(triangle);\n heap.push(triangle);\n }\n\n for (i = 0, n = triangles.length; i < n; ++i) {\n triangle = triangles[i];\n triangle.previous = triangles[i - 1];\n triangle.next = triangles[i + 1];\n }\n\n while (triangle = heap.pop()) {\n var previous = triangle.previous,\n next = triangle.next;\n\n // If the area of the current point is less than that of the previous point\n // to be eliminated, use the latter's area instead. This ensures that the\n // current point cannot be eliminated without eliminating previously-\n // eliminated points.\n if (triangle[1][2] < maxArea) triangle[1][2] = maxArea;\n else maxArea = triangle[1][2];\n\n if (previous) {\n previous.next = next;\n previous[2] = triangle[2];\n update(previous);\n }\n\n if (next) {\n next.previous = previous;\n next[0] = triangle[0];\n update(next);\n }\n }\n\n arc.forEach(relative);\n });\n\n function update(triangle) {\n heap.remove(triangle);\n triangle[1][2] = triangleArea(triangle);\n heap.push(triangle);\n }\n\n return topology;\n}\n\nvar version = \"1.6.27\";\n\nexports.version = version;\nexports.mesh = mesh;\nexports.meshArcs = meshArcs;\nexports.merge = merge;\nexports.mergeArcs = mergeArcs;\nexports.feature = feature;\nexports.neighbors = neighbors;\nexports.presimplify = presimplify;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-geo\"));\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nclass GeoScale extends widgets.WidgetView {\n render() {\n this.set_projection();\n this.listenTo(this.model, \"attribute_changed\", this.reset_scale);\n }\n set_projection() {\n this.path = d3.geoPath().projection(this.model.projection);\n this.scale = this.model.projection;\n }\n reset_scale() {\n this.set_projection();\n this.trigger(\"domain_changed\", null);\n }\n}\nexports.GeoScale = GeoScale;\nclass Mercator extends GeoScale {\n}\nexports.Mercator = Mercator;\nclass Albers extends GeoScale {\n}\nexports.Albers = Albers;\nclass AlbersUSA extends GeoScale {\n}\nexports.AlbersUSA = AlbersUSA;\nclass EquiRectangular extends GeoScale {\n}\nexports.EquiRectangular = EquiRectangular;\nclass Orthographic extends GeoScale {\n}\nexports.Orthographic = Orthographic;\nclass Gnomonic extends GeoScale {\n}\nexports.Gnomonic = Gnomonic;\nclass Stereographic extends GeoScale {\n}\nexports.Stereographic = Stereographic;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VvU2NhbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvR2VvU2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QixnREFBZ0Q7QUFDaEQsK0RBQWlEO0FBR2pELE1BQWEsUUFBUyxTQUFRLE9BQU8sQ0FBQyxVQUFVO0lBRTVDLE1BQU07UUFDRixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBTUo7QUFyQkQsNEJBcUJDO0FBRUQsTUFBYSxRQUFTLFNBQVEsUUFBUTtDQUNyQztBQURELDRCQUNDO0FBRUQsTUFBYSxNQUFPLFNBQVEsUUFBUTtDQUNuQztBQURELHdCQUNDO0FBRUQsTUFBYSxTQUFVLFNBQVEsUUFBUTtDQUN0QztBQURELDhCQUNDO0FBRUQsTUFBYSxlQUFnQixTQUFRLFFBQVE7Q0FDNUM7QUFERCwwQ0FDQztBQUVELE1BQWEsWUFBYSxTQUFRLFFBQVE7Q0FDekM7QUFERCxvQ0FDQztBQUVELE1BQWEsUUFBUyxTQUFRLFFBQVE7Q0FDckM7QUFERCw0QkFDQztBQUVELE1BQWEsYUFBYyxTQUFRLFFBQVE7Q0FDMUM7QUFERCxzQ0FDQyJ9","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-geo\"));\nconst ScaleModel_1 = require(\"./ScaleModel\");\nclass GeoScaleModel extends ScaleModel_1.ScaleModel {\n defaults() {\n return Object.assign({}, ScaleModel_1.ScaleModel.prototype.defaults(), { _model_name: \"GeoScaleModel\", _view_name: \"GeoScale\" });\n }\n compute_and_set_domain(data_array, id) {\n }\n update_domain() {\n }\n}\nexports.GeoScaleModel = GeoScaleModel;\nclass MercatorModel extends GeoScaleModel {\n defaults() {\n return Object.assign({}, GeoScaleModel.prototype.defaults(), { _model_name: \"MercatorModel\", _view_name: \"Mercator\", scale_factor: 190.0, center: [0, 60], rotate: [0, 0] });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"scale_factor\", \"center\", \"rotate\"], this.create_projection, this);\n this.create_projection();\n }\n create_projection() {\n this.projection = d3.geoMercator()\n .center(this.get(\"center\"))\n .scale(this.get(\"scale_factor\"))\n .rotate(this.get(\"rotate\"));\n this.attribute_changed();\n }\n attribute_changed() {\n this.trigger(\"attribute_changed\");\n }\n}\nexports.MercatorModel = MercatorModel;\nclass AlbersModel extends GeoScaleModel {\n defaults() {\n return Object.assign({}, GeoScaleModel.prototype.defaults(), { _model_name: \"AlbersModel\", _view_name: \"Albers\", scale_factor: 250.0, \n /*rotate: [96, 0],*/\n center: [0, 60], parallels: [29.5, 45.5], precision: 0.1 });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"rotate\", \"center\", \"parallels\", \"scale_factor\", \"precision\"], this.create_projection, this);\n this.create_projection();\n }\n create_projection() {\n this.projection = d3.geoAlbers()\n .rotate(this.get(\"rotate\"))\n .center(this.get(\"center\"))\n .parallels(this.get(\"parallels\"))\n .scale(this.get(\"scale_factor\"))\n .precision(this.get(\"precision\"));\n this.attribute_changed();\n }\n attribute_changed() {\n this.trigger(\"attribute_changed\");\n }\n}\nexports.AlbersModel = AlbersModel;\nclass AlbersUSAModel extends GeoScaleModel {\n defaults() {\n return Object.assign({}, GeoScaleModel.prototype.defaults(), { _model_name: \"AlbersUSAModel\", _view_name: \"AlbersUSA\", scale_factor: 1200, translate: [600, 490] // center of the SVG viewbox (see Map.js)\n });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"scale_factor\", \"translate\"], this.create_projection, this);\n this.create_projection();\n }\n create_projection() {\n this.projection = d3.geoAlbersUsa()\n .scale(this.get(\"scale_factor\"))\n .translate(this.get(\"translate\"));\n this.attribute_changed();\n }\n attribute_changed() {\n this.trigger(\"attribute_changed\");\n }\n}\nexports.AlbersUSAModel = AlbersUSAModel;\nclass EquiRectangularModel extends GeoScaleModel {\n defaults() {\n return Object.assign({}, GeoScaleModel.prototype.defaults(), { _model_name: \"EquiRectangularModel\", _view_name: \"EquiRectangular\", scale_factor: 145.0 });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"scale_factor\", \"center\"], this.create_projection, this);\n this.create_projection();\n }\n create_projection() {\n this.projection = d3.geoEquirectangular()\n .center(this.get(\"center\"))\n .scale(this.get(\"scale_factor\"));\n this.attribute_changed();\n }\n attribute_changed() {\n this.trigger(\"attribute_changed\");\n }\n}\nexports.EquiRectangularModel = EquiRectangularModel;\nclass OrthographicModel extends GeoScaleModel {\n defaults() {\n return Object.assign({}, GeoScaleModel.prototype.defaults(), { _model_name: \"OrthographicModel\", _view_name: \"Orthographic\", scale_factor: 145.0, center: [0, 60], rotate: [0, 0], clip_angle: 90.0, precision: 0.1 });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"scale_factor\", \"center\", \"clip_angle\", \"rotate\", \"precision\"], this.create_projection, this);\n this.create_projection();\n }\n create_projection() {\n this.projection = d3.geoOrthographic()\n .center(this.get(\"center\"))\n .scale(this.get(\"scale_factor\"))\n .clipAngle(this.get(\"clip_angle\"))\n .rotate(this.get(\"rotate\"))\n .precision(this.get(\"precision\"));\n this.attribute_changed();\n }\n attribute_changed() {\n this.trigger(\"attribute_changed\");\n }\n}\nexports.OrthographicModel = OrthographicModel;\nclass GnomonicModel extends GeoScaleModel {\n defaults() {\n return Object.assign({}, GeoScaleModel.prototype.defaults(), { _model_name: \"GnomonicModel\", _view_name: \"Gnomonic\", scale_factor: 145.0, center: [0, 60], precision: 0.1, clip_angle: 89.999 });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"scale_factor\", \"precision\", \"clip_angle\"], this.create_projection, this);\n this.create_projection();\n }\n create_projection() {\n this.projection = d3.geoGnomonic()\n .clipAngle(this.get(\"clip_angle\"))\n .scale(this.get(\"scale_factor\"))\n .precision(this.get(\"precision\"));\n this.attribute_changed();\n }\n attribute_changed() {\n this.trigger(\"attribute_changed\");\n }\n}\nexports.GnomonicModel = GnomonicModel;\nclass StereographicModel extends GeoScaleModel {\n defaults() {\n return Object.assign({}, GeoScaleModel.prototype.defaults(), { _model_name: \"StereographicModel\", _view_name: \"StereographicModel\", scale_factor: 245, center: [0, 60], precision: 0.1, rotate: [96, 0], clip_angle: 179.9999 });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"scale_factor\", \"center\", \"clip_angle\", \"rotate\", \"precision\"], this.create_projection, this);\n this.create_projection();\n }\n create_projection() {\n this.projection = d3.geoStereographic()\n .scale(this.get(\"scale_factor\"))\n .rotate(this.get(\"rotate\"))\n .clipAngle(this.get(\"clip_angle\"))\n .center(this.get(\"center\"))\n .precision(this.get(\"precision\"));\n this.attribute_changed();\n }\n attribute_changed() {\n this.trigger(\"attribute_changed\");\n }\n}\nexports.StereographicModel = StereographicModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VvU2NhbGVNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9HZW9TY2FsZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsZ0RBQWdEO0FBQ2hELDZDQUEwQztBQUUxQyxNQUFhLGFBQWMsU0FBUSx1QkFBVTtJQUV6QyxRQUFRO1FBQ0oseUJBQVcsdUJBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3RDLFdBQVcsRUFBRSxlQUFlLEVBQzVCLFVBQVUsRUFBRSxVQUFVLElBQ3hCO0lBQ04sQ0FBQztJQUVELHNCQUFzQixDQUFDLFVBQVUsRUFBRSxFQUFFO0lBQ3JDLENBQUM7SUFFRCxhQUFhO0lBQ2IsQ0FBQztDQUdKO0FBaEJELHNDQWdCQztBQUVELE1BQWEsYUFBYyxTQUFRLGFBQWE7SUFFNUMsUUFBUTtRQUNKLHlCQUFXLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3pDLFdBQVcsRUFBRSxlQUFlLEVBQzVCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFlBQVksRUFBRSxLQUFLLEVBQ25CLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFDZixNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQ2hCO0lBQ04sQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTztRQUMxQixLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksQ0FBQyxVQUFV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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst _ = __importStar(require(\"underscore\"));\nconst messaging_1 = require(\"@phosphor/messaging\");\nconst widgets_1 = require(\"@phosphor/widgets\");\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-format\"), require(\"d3-selection\"), require(\"d3-selection-multi\"), require(\"d3-shape\"));\nconst Figure_1 = require(\"./Figure\");\nconst popperreference = __importStar(require(\"./PopperReference\"));\nconst popper_js_1 = __importDefault(require(\"popper.js\"));\nclass MarketMap extends Figure_1.Figure {\n render(options) {\n this.id = widgets.uuid();\n const figureSize = this.getFigureSize();\n this.width = figureSize.width;\n this.height = figureSize.height;\n this.scales = {};\n this.set_top_el_style();\n const that = this;\n this.margin = this.model.get(\"map_margin\");\n this.num_rows = this.model.get(\"rows\");\n this.num_cols = this.model.get(\"cols\");\n this.row_groups = this.model.get(\"row_groups\");\n this.enable_select = this.model.get(\"enable_select\");\n this.update_data();\n // set the number of rows and columns in the map\n this.set_area_dimensions(this.data.length);\n if (this.model.get('theme')) {\n this.svg.classed(this.model.get('theme'), true);\n }\n this.fig = this.svg.append(\"g\")\n .attr(\"transform\", \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\");\n this.fig_map = this.fig.append(\"g\");\n this.fig_axes = this.fig.append(\"g\");\n this.fig_click = this.fig.append(\"g\");\n this.fig_hover = this.fig.append(\"g\");\n this.fig_names = this.fig.append(\"g\")\n .style(\"display\", (this.model.get(\"show_groups\") ? \"inline\" : \"none\"));\n this.fig_map.classed(\"g-map\", true);\n this.fig_axes.classed(\"g-axes\", true);\n this.fig_click.classed(\"g-click\", true);\n this.fig_hover.classed(\"g-hover\", true);\n this.fig_names.classed(\"g-names\", true);\n this.axis = [];\n // code for tool tip to be displayed\n this.tooltip_div = d3.select(document.createElement(\"div\"))\n .attr(\"class\", \"mark_tooltip\");\n this.tooltip_div.styles({ \"opacity\": 0, \"pointer-events\": \"none\" });\n const freeze_tooltip_loc = this.model.get(\"freeze_tooltip_location\");\n if (freeze_tooltip_loc) {\n this.popper_reference = new popperreference.ElementReference(this.svg.node());\n }\n else {\n this.popper_reference = new popperreference.PositionReference({ x: 0, y: 0, width: 20, height: 20 });\n }\n this.popper = new popper_js_1.default(this.popper_reference, this.tooltip_div.node(), {\n placement: 'auto',\n });\n this.update_default_tooltip();\n this.selected_stroke = this.model.get(\"selected_stroke\");\n this.hovered_stroke = this.model.get(\"hovered_stroke\");\n this.update_plotarea_dimensions();\n this.title = this.fig.append(\"text\")\n .attr(\"class\", \"mainheading\")\n .attrs({ x: (0.5 * (this.plotarea_width)), y: -(this.margin.top / 2.0), dy: \"1em\" })\n .text(this.model.get(\"title\"));\n this.title.styles(this.model.get(\"title_style\"));\n const scale_creation_promise = this.create_scale_views();\n scale_creation_promise.then(function () {\n that.create_listeners();\n that.axis_views = new widgets.ViewList(that.add_axis, null, that);\n that.axis_views.update(that.model.get(\"axes\"));\n that.model.on(\"change:axes\", function (model, value, options) {\n that.axis_views.update(value);\n });\n });\n this.displayed.then(function () {\n document.body.appendChild(that.tooltip_div.node());\n that.relayout();\n that.draw_group_names();\n that.create_tooltip_widget();\n });\n return scale_creation_promise;\n }\n set_top_el_style() {\n this.el.style[\"user-select\"] = \"none\";\n this.el.style[\"ms-user-select\"] = \"none\";\n this.el.style[\"moz-user-select\"] = \"none\";\n this.el.style[\"khtml-user-select\"] = \"none\";\n this.el.style[\"webkit-user-select\"] = \"none\";\n }\n update_plotarea_dimensions() {\n this.plotarea_width = this.width - this.margin.left - this.margin.right;\n this.plotarea_height = this.height - this.margin.top - this.margin.bottom;\n this.column_width = parseFloat((this.plotarea_width / this.num_cols).toFixed(2));\n this.row_height = parseFloat((this.plotarea_height / this.num_rows).toFixed(2));\n }\n reset_drawing_controls() {\n // Properties useful in drawing the map\n this.prev_x = 0;\n this.prev_y = -1;\n this.y_direction = 1; // for y direction 1 means going to the right\n this.x_direction = 1; // for x direction 1 means going down\n this.group_iter = 1;\n }\n create_listeners() {\n this.listenTo(this.model, \"change:scales\", this.create_scale_views);\n this.listenTo(this.model, \"change:color\", this.recolor_chart);\n this.listenTo(this.model, \"change:colors\", this.colors_updated);\n this.listenTo(this.model, \"change:show_groups\", this.show_groups);\n this.listenTo(this.model, \"change:selected_stroke\", this.update_selected_stroke);\n this.listenTo(this.model, \"change:hovered_stroke\", this.update_hovered_stroke);\n this.listenTo(this.model, \"change:font_style\", this.update_font_style);\n this.model.on_some_change([\"title\", \"title_style\"], this.update_title, this);\n this.listenTo(this.model, \"change:selected\", function () {\n this.clear_selected();\n this.apply_selected();\n });\n this.model.on_some_change([\"names\", \"groups\", \"ref_data\"], function () {\n this.update_data();\n this.compute_dimensions_and_draw();\n }, this);\n this.listenTo(this.model, \"change:rows\", function (model, value) {\n this.num_rows = value;\n this.compute_dimensions_and_draw();\n });\n this.listenTo(this.model, \"change:cols\", function (model, value) {\n this.num_cols = value;\n this.compute_dimensions_and_draw();\n });\n this.listenTo(this.model, \"change:row_groups\", function (model, value) {\n this.row_groups = value;\n this.compute_dimensions_and_draw();\n });\n this.listenTo(this.model, \"change:tooltip_widget\", this.create_tooltip_widget);\n this.listenTo(this.model, \"change:tooltip_fields\", this.update_default_tooltip);\n this.listenTo(this.model, \"change:tooltip_formats\", this.update_default_tooltip);\n }\n update_title(model, value) {\n this.title.text(this.model.get(\"title\"))\n .styles(this.model.get(\"title_style\"));\n }\n relayout() {\n const that = this;\n const figureSize = this.getFigureSize();\n this.width = figureSize.width;\n this.height = figureSize.height;\n window.requestAnimationFrame(function () {\n // update ranges\n that.margin = that.model.get(\"map_margin\");\n that.update_plotarea_dimensions();\n // transform figure\n that.fig.attr(\"transform\", \"translate(\" + that.margin.left + \",\" +\n that.margin.top + \")\");\n that.title.attrs({\n x: (0.5 * (that.plotarea_width)),\n y: -(that.margin.top / 2.0),\n dy: \"1em\"\n });\n that.draw_map();\n // Drawing the selected cells\n that.clear_selected();\n that.apply_selected();\n // When map is expanded or contracted, there should not be any\n // accidental hovers. To prevent this, the following call is made.\n that.fig_hover.selectAll(\"rect\")\n .remove();\n that.hide_tooltip();\n that.trigger(\"margin_updated\");\n });\n }\n update_data() {\n const that = this;\n this.data = this.model.get(\"names\") || [];\n this.ref_data = this.model.get(\"ref_data\");\n this.group_data = this.model.get(\"groups\");\n this.groups = _.uniq(this.group_data, true);\n let display_text = this.model.get(\"display_text\");\n display_text = (display_text === null || display_text.length === 0) ? this.data : display_text;\n this.colors = this.model.get(\"colors\");\n const num_colors = this.colors.length;\n this.colors_map = function (d) { return that.get_color(d, num_colors); };\n const color_data = this.model.get(\"color\");\n const mapped_data = _.map(this.data, (d, i) => {\n return {\n display: display_text[i],\n name: d,\n color: Number.isNaN(color_data[i]) ? undefined : color_data[i],\n group: this.group_data[i],\n ref_data: (this.ref_data === null || this.ref_data === undefined) ? null : this.ref_data[i]\n };\n });\n this.update_domains();\n this.grouped_data = _.groupBy(mapped_data, function (d, i) { return that.group_data[i]; });\n this.groups = [];\n this.running_sums = [];\n this.running_sums[0] = 0;\n let count = 0;\n for (let key in this.grouped_data) {\n this.groups.push(key);\n count += this.grouped_data[key].length;\n this.running_sums.push(count);\n }\n this.running_sums.pop();\n }\n update_domains() {\n const color_scale_model = this.model.get(\"scales\").color;\n const color_data = this.model.get(\"color\");\n if (color_scale_model && color_data.length > 0) {\n color_scale_model.compute_and_set_domain(color_data, this.model.model_id);\n }\n }\n set_area_dimensions(num_items) {\n this.num_rows = this.model.get(\"rows\");\n this.num_cols = this.model.get(\"cols\");\n this.row_groups = this.model.get(\"row_groups\");\n if (this.num_cols !== undefined && this.num_cols !== null && this.num_cols !== 0) {\n // When the number of row groups is greater than 1, the number\n // of columns has to be an odd number. This is to\n // ensure the continuity of the waffles when groups are spread\n // across multiple row groups\n if (this.row_groups > 1 && this.num_cols % 2 === 0)\n this.num_cols++;\n this.num_rows = Math.floor(num_items / this.num_cols);\n this.num_rows = (num_items % this.num_cols === 0) ? this.num_rows : (this.num_rows + 1);\n }\n else if (this.num_rows !== undefined && this.num_rows !== null && this.num_rows !== 0) {\n this.num_cols = Math.floor(num_items / this.num_rows);\n this.num_cols = (num_items % this.num_rows === 0) ? this.num_cols : (this.num_cols + 1);\n if (this.row_groups > 1 && this.num_cols % 2 === 0)\n this.num_cols++;\n }\n else {\n this.num_cols = Math.floor(Math.sqrt(num_items));\n if (this.row_groups > 1 && this.num_cols % 2 === 0)\n this.num_cols++;\n this.num_rows = Math.floor(num_items / this.num_cols);\n this.num_rows = (num_items % this.num_cols === 0) ? this.num_rows : (this.num_rows + 1);\n }\n // row_groups cannot be greater than the number of rows\n this.row_groups = Math.min(this.row_groups, this.num_rows);\n // if there is only one row_group, then the number of columns are\n // not necessarily equal to the variable this.num_cols as we draw\n // row first. So we need to adjust the this.num_cols variable\n // according to the num_rows.\n if (this.row_groups == 1) {\n this.num_cols = Math.floor(num_items / this.num_rows);\n this.num_cols = (num_items % this.num_rows === 0) ? this.num_cols : (this.num_cols + 1);\n }\n // depending on the number of rows, we need to decide when to\n // switch direction. The below functions tells us where to swtich\n // direction.\n this.set_row_limits();\n }\n compute_dimensions_and_draw() {\n this.set_area_dimensions(this.data.length);\n this.update_plotarea_dimensions();\n this.draw_map();\n this.clear_selected();\n this.apply_selected();\n // when data is changed\n this.fig_hover.selectAll(\"rect\")\n .remove();\n this.hide_tooltip();\n }\n update_default_tooltip() {\n this.tooltip_fields = this.model.get(\"tooltip_fields\");\n const formats = this.model.get(\"tooltip_formats\");\n this.tooltip_formats = this.tooltip_fields.map(function (field, index) {\n const fmt = formats[index];\n if (fmt === undefined || fmt === \"\") {\n return function (d) { return d; };\n }\n else\n return d3.format(fmt);\n });\n }\n create_scale_views() {\n for (let key in this.scales) {\n this.stopListening(this.scales[key]);\n }\n const scale_models = this.model.get(\"scales\");\n const that = this;\n const scale_promises = {};\n _.each(scale_models, function (model, key) {\n scale_promises[key] = that.create_child_view(model);\n });\n return widgets.resolvePromisesDict(scale_promises).then(function (d) {\n that.scales = d;\n that.set_scales();\n });\n }\n set_scales() {\n const that = this;\n const color_scale = this.scales.color;\n if (color_scale) {\n color_scale.set_range();\n color_scale.on(\"color_scale_range_changed\", that.update_map_colors, that);\n this.update_domains();\n this.listenTo(color_scale, \"domain_changed\", function () {\n that.update_map_colors();\n });\n this.update_map_colors();\n }\n }\n show_groups(model, value) {\n this.fig_names.style(\"display\", (value ? \"inline\" : \"none\"));\n this.fig_map.selectAll(\".market_map_text\").style(\"opacity\", (value ? 0.2 : 1));\n this.fig_map.selectAll(\".market_map_rect\").style(\"stroke-opacity\", (value ? 0.2 : 1));\n }\n draw_map() {\n this.reset_drawing_controls();\n // Removing pre existing elements from the map\n this.fig_map.selectAll(\".element_group\").remove();\n this.fig_names.selectAll(\".names_object\").remove();\n this.rect_groups = this.fig_map.selectAll(\".element_group\")\n .data(this.groups);\n const color_scale = this.scales.color;\n const that = this;\n this.rect_groups = this.rect_groups.enter()\n .append(\"g\")\n .attr(\"class\", \"element_group\")\n .attr(\"transform\", function (d, i) { return that.get_group_transform(i); })\n .merge(this.rect_groups);\n this.rect_groups.exit().remove();\n this.end_points = [];\n this.rect_groups.nodes().forEach(function (d, i) {\n const data = that.grouped_data[that.groups[i]];\n const return_arr = that.get_new_cords();\n const ends = that.get_end_points(return_arr[2], data.length, return_arr[0], return_arr[1], return_arr[3], return_arr[4]);\n ends.forEach(function (point) { that.end_points.push(point); });\n const element_count = that.running_sums[i];\n let groups = d3.select(d)\n .selectAll(\".rect_element\")\n .data(data);\n // Appending the <g> <rect> and <text> elements to the newly\n // added nodes\n const new_groups = groups.enter()\n .append(\"g\")\n .classed(\"rect_element\", true);\n new_groups.append(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .classed(\"market_map_rect\", true);\n // Grouping calls to style into a single call to styles\n // leads to build error despite the import of d3-selection-multi\n new_groups.append(\"text\")\n .classed(\"market_map_text\", true)\n .style(\"text-anchor\", \"middle\")\n .style(\"pointer-events\", \"none\")\n .style(\"dominant-baseline\", \"central\");\n groups = new_groups.merge(groups);\n // Update the attributes of the entire set of nodes\n groups.attr(\"transform\", function (data, ind) { return that.get_cell_transform(ind); })\n .on(\"click\", function (data, ind) { that.cell_click_handler(data, (element_count + ind), this); })\n .on(\"mouseover\", function (data, ind) { that.mouseover_handler(data, (element_count + ind), this); })\n .on(\"mousemove\", function (data) { that.mousemove_handler(); })\n .on(\"mouseout\", function (data, ind) { that.mouseout_handler(data, (element_count + ind), this); })\n .attr(\"class\", function (data, index) { return d3.select(this).attr(\"class\") + \" \" + \"rect_\" + (element_count + index); });\n groups.selectAll(\".market_map_rect\")\n .attr(\"width\", that.column_width)\n .attr(\"height\", that.row_height)\n .style(\"stroke-opacity\", (that.model.get(\"show_groups\") ? 0.2 : 1.0))\n .style('stroke', that.model.get(\"stroke\"))\n .style(\"fill\", function (elem, j) {\n return (color_scale && elem.color !== undefined && elem.color !== null) ?\n color_scale.scale(elem.color) :\n that.colors_map(i);\n });\n groups.selectAll(\".market_map_text\")\n .attr(\"x\", that.column_width / 2.0)\n .attr(\"y\", that.row_height / 2.0)\n .text(function (data, j) { return data.display; })\n .style(\"opacity\", (that.model.get(\"show_groups\") ? 0.2 : 1.0));\n // Removing the old nodes\n groups.exit().remove();\n that.create_bounding_path(d, ends);\n const min_x = d3.min(ends, function (end_point) { return end_point.x; });\n const min_y = d3.min(ends, function (end_point) { return end_point.y; });\n that.fig_names.append(\"foreignObject\")\n .attr(\"class\", \"names_object\")\n .attr(\"x\", min_x)\n .attr(\"y\", min_y)\n .append(\"xhtml:div\")\n .attr(\"class\", \"names_div\")\n .styles({ \"display\": \"flex\", \"flex-direction\": \"row\", \"align-content\": \"center\", \"align-items\": \"center\", \"width\": \"100%\",\n \"height\": \"100%\", \"justify-content\": \"center\", \"word-wrap\": \"break-word\", \"font\": \"24px sans-serif\", \"color\": \"black\" })\n .text(that.groups[i]);\n });\n this.update_font_style();\n this.draw_group_names();\n }\n draw_group_names() {\n // Get all the bounding rects of the paths around each of the\n // sectors. Get their client bounding rect.\n const paths = this.svg.selectAll(\".bounding_path\").nodes();\n const clientRects = paths.map(function (path) { return path.getBoundingClientRect(); });\n const text_elements = this.fig_names.selectAll(\".names_object\").data(clientRects);\n text_elements.attr(\"width\", function (d) { return d.width; })\n .attr(\"height\", function (d) { return d.height; });\n }\n recolor_chart() {\n const that = this;\n this.update_data();\n this.rect_groups = this.fig.selectAll(\".element_group\")\n .data(this.groups);\n const color_scale = this.scales.color;\n this.rect_groups.nodes().forEach(function (d, i) {\n const data = that.grouped_data[that.groups[i]];\n d3.select(d)\n .selectAll(\".rect_element\")\n .data(data)\n .select('rect')\n .style('stroke', that.model.get('stroke'))\n .style('fill', function (elem, j) {\n return (color_scale && elem.color !== undefined && elem.color !== null) ?\n color_scale.scale(elem.color) :\n that.colors_map(i);\n });\n });\n }\n update_font_style() {\n // This is a bit awkward because we did not figure out how to get\n // Typescript to recognize the d3-select-multi typings.\n const x = this.svg.selectAll(\".market_map_text\");\n x.styles(this.model.get('font_style'));\n }\n update_map_colors() {\n if (this.rect_groups !== undefined && this.rect_groups !== null) {\n this.recolor_chart();\n }\n }\n cell_click_handler(data, id, cell) {\n if (this.model.get(\"enable_select\")) {\n const selected = this.model.get(\"selected\").slice();\n const index = selected.indexOf(data.name);\n if (index == -1) {\n // not already selected, so add to selected\n selected.push(data.name);\n }\n else {\n // already in selected list, so delete from selected\n selected.splice(index, 1);\n }\n this.model.set(\"selected\", selected);\n this.touch();\n }\n }\n apply_selected() {\n const selected = this.model.get(\"selected\");\n const that = this;\n if (selected === undefined || selected === null || selected.length === 0)\n this.clear_selected();\n else {\n selected.forEach(function (data) {\n const selected_cell = that.fig_map\n .selectAll(\".rect_element\")\n .filter(function (d, i) {\n return d.name === data;\n });\n that.fig_click\n .append(\"rect\")\n .data(selected_cell.data())\n .attr(\"transform\", selected_cell.attr(\"transform\"))\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", that.column_width)\n .attr(\"height\", that.row_height)\n .styles({ \"stroke\": that.selected_stroke,\n \"stroke-width\": \"3px\",\n \"fill\": \"none\" });\n });\n }\n }\n clear_selected() {\n this.fig_click.selectAll(\"rect\").remove();\n }\n mouseover_handler(data, id, cell) {\n const transform = d3.select(cell).attr(\"transform\");\n if (this.model.get(\"enable_hover\")) {\n this.fig_hover.append(\"rect\")\n .attr(\"class\", \"hover_\" + id)\n .attr(\"transform\", transform)\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", this.column_width)\n .attr(\"height\", this.row_height)\n .styles({ 'stroke': this.hovered_stroke, 'stroke-width': '3px', 'fill': 'none',\n 'pointer-events': 'none' });\n this.show_tooltip(d3.event, data);\n this.send({ event: \"hover\", data: data.name, ref_data: data.ref_data });\n }\n }\n update_selected_stroke(model, value) {\n this.selected_stroke = value;\n this.fig_click.selectAll(\"rect\")\n .style('stroke', value);\n }\n update_hovered_stroke(model, value) {\n this.hovered_stroke = value;\n // I do not need to update anything else because when hovered color\n // is being updated you are not hovering over anything.\n }\n mouseout_handler(data, id, cell) {\n this.fig_hover.select(\".hover_\" + id)\n .remove();\n this.hide_tooltip();\n }\n show_tooltip(event, data) {\n const that = this;\n if (!this.tooltip_view && (!this.tooltip_fields || this.tooltip_fields.length == 0)) {\n return;\n }\n else {\n const tooltip_div = this.tooltip_div;\n tooltip_div.transition()\n .styles({ \"opacity\": 0.9, \"display\": null });\n this.move_tooltip();\n tooltip_div.select(\"table\").remove();\n const ref_data = data.ref_data;\n if (!this.tooltip_view) {\n const tooltip_table = tooltip_div.append(\"table\")\n .selectAll(\"tr\").data(this.tooltip_fields);\n tooltip_table.exit().remove();\n const table_rows = tooltip_table.enter().append(\"tr\");\n table_rows.append(\"td\")\n .attr(\"class\", \"tooltiptext\")\n .text(function (datum) { return datum; });\n table_rows.append(\"td\")\n .attr(\"class\", \"tooltiptext\")\n .text(function (datum, index) { return (ref_data === null || ref_data === undefined) ? null : that.tooltip_formats[index](ref_data[datum]); });\n }\n this.popper.enableEventListeners();\n this.move_tooltip();\n }\n }\n mousemove_handler() {\n this.move_tooltip();\n }\n move_tooltip() {\n this.popper_reference.x = d3.event.clientX;\n this.popper_reference.y = d3.event.clientY;\n this.popper.scheduleUpdate();\n }\n hide_tooltip() {\n this.tooltip_div.style(\"pointer-events\", \"none\");\n this.tooltip_div.transition()\n .styles({ \"opacity\": 0, \"display\": \"none\" });\n this.popper.disableEventListeners();\n }\n create_tooltip_widget() {\n const tooltip_model = this.model.get(\"tooltip_widget\");\n if ((this.tooltip_view !== null && this.tooltip_view !== undefined)) {\n //remove the previous tooltip\n this.tooltip_view.remove();\n this.tooltip_view = null;\n }\n const that = this;\n if (tooltip_model) {\n const tooltip_widget_creation_promise = this.create_child_view(tooltip_model);\n tooltip_widget_creation_promise.then(function (view) {\n that.tooltip_view = view;\n messaging_1.MessageLoop.sendMessage(view.pWidget, widgets_1.Widget.Msg.BeforeAttach);\n that.tooltip_div.node().appendChild(view.el);\n messaging_1.MessageLoop.sendMessage(view.pWidget, widgets_1.Widget.Msg.AfterAttach);\n });\n }\n }\n get_group_transform(index) {\n return \"translate(\" + '0' + \", 0)\";\n }\n get_cell_transform(index) {\n if (!this.past_border_y()) {\n if (this.past_border_x()) {\n this.y_direction = -1 * this.y_direction;\n this.prev_x += this.x_direction;\n }\n else {\n this.x_direction = -1 * this.x_direction;\n this.prev_y += this.y_direction;\n this.group_iter += 1;\n }\n }\n else {\n this.prev_y += this.y_direction;\n }\n return \"translate(\" + (this.prev_x * this.column_width) + \", \" +\n (this.prev_y * this.row_height) + \")\";\n }\n get_new_cords() {\n let new_x = this.prev_x;\n let new_y = this.prev_y;\n let y_direction = this.y_direction;\n let x_direction = this.x_direction;\n let group_iter = this.group_iter;\n if (!this.past_border_y()) {\n if (this.past_border_x()) {\n y_direction = -1 * this.y_direction;\n new_x += this.x_direction;\n }\n else {\n x_direction = -1 * this.x_direction;\n new_y += this.y_direction;\n group_iter += 1;\n }\n }\n else {\n new_y += this.y_direction;\n }\n return [new_x, new_y, group_iter, x_direction, y_direction, new_x * this.column_width, new_y * this.row_height];\n }\n past_border_y() {\n if (this.y_direction == 1) {\n return (this.prev_y + 1) < this.row_limits[this.group_iter];\n }\n else {\n return (this.prev_y - 1) > this.row_limits[this.group_iter - 1] - 1;\n }\n }\n past_border_x() {\n if (this.x_direction == 1) {\n return (this.prev_x + 1) < this.num_cols;\n }\n else {\n return (this.prev_x - 1) > -1;\n }\n }\n colors_updated() {\n this.colors = this.model.get(\"colors\");\n this.recolor_chart();\n }\n get_color(index, length) {\n return this.colors[index % length];\n }\n set_row_limits() {\n const step = Math.floor(this.num_rows / this.row_groups);\n this.row_limits = [];\n for (let iter = this.row_groups - 1; iter > -1; iter--) {\n this.row_limits.unshift(iter * step);\n }\n this.row_limits[this.row_groups] = this.num_rows;\n }\n get_end_points(group_iter, num_cells, start_col, start_row, x_direction, y_direction) {\n //start_row is the 0-based index and not a 1-based index, i.e., it\n //is not the column number in the truest sense\n // Function to get the end points of the rectangle representing the\n // groups.\n // Requires the direction variables to be updated before this\n // function is called\n let top_row = this.row_limits[group_iter - 1];\n let bottom_row = this.row_limits[group_iter];\n let across = false;\n let init_x = x_direction;\n let init_y = y_direction;\n const end_points = [];\n let current_row;\n let rows_remaining = (init_y == 1) ? (bottom_row - start_row) : (start_row - top_row + 1);\n let cols_remaining = (init_x == 1) ? (this.num_cols - 1 - start_col) : (start_col); // this is the num of columns remaining\n //after the cuirrent column has been filled\n let elem_remaining = num_cells;\n //this holds the number of continuous cols that will be filled\n //between the current top and bottom rows\n let num_rows = bottom_row - top_row;\n if (elem_remaining !== 0) {\n // starting corener of the path\n this.calc_end_point_source(start_col, start_row, init_x, init_y).forEach(function (d) { end_points.push(d); });\n const elem_filled = Math.min(rows_remaining, elem_remaining);\n if (elem_filled === elem_remaining) {\n // There are enough elements only to fill one column\n // partially. We add the three end points and exit\n // The adjacent corner from the starting corner. This is\n // required because the elements are filled in the first\n // row itself.\n this.calc_end_point_source(start_col, start_row, (-1) * init_x, init_y).forEach(function (d) { end_points.push(d); });\n current_row = start_row + (elem_remaining - 1) * init_y;\n this.calc_end_point_dest(start_col, current_row, (-1) * init_x, init_y).forEach(function (e) { end_points.push(e); });\n this.calc_end_point_dest(start_col, current_row, init_x, init_y).forEach(function (e) { end_points.push(e); });\n /*\n console.log(\"new set\");\n end_points.forEach(function(point) { console.log(point); });\n console.log(\"end set\");\n */\n return end_points;\n }\n elem_remaining = elem_remaining - elem_filled;\n if (cols_remaining === 0) {\n // Since this is the last column, the adjacent corner from\n // the starting corner is added here too\n this.calc_end_point_source(start_col, start_row, init_x * (-1), init_y).forEach(function (d) { end_points.push(d); });\n }\n else if (rows_remaining !== (bottom_row - top_row)) {\n // If the starting row is not the starting row of a group,\n // the poirnt adjacent to the starting point needs to be\n // added.\n this.calc_end_point_source(start_col, start_row, init_x * (-1), init_y).forEach(function (d) { end_points.push(d); });\n if (elem_remaining > num_rows) {\n // If next row is completely filled, then the top row\n // element of the next column is an end point. That is\n // being added here.\n this.calc_end_point_dest(start_col + init_x, (init_y == 1) ? top_row :\n bottom_row - 1, init_x * (-1), init_y * (-1)).forEach(function (d) { end_points.push(d); });\n }\n }\n else if (elem_remaining < num_rows) {\n // one continuous row in this case\n this.calc_end_point_source(start_col, start_row, (-1) * init_x, init_y).forEach(function (d) { end_points.push(d); });\n }\n start_row = start_row + (init_y * (elem_filled - 1));\n //first set of end points are added here\n this.calc_end_point_dest(start_col, start_row, (-1) * init_x, init_y).forEach(function (d) { end_points.push(d); });\n if (elem_remaining === 0) {\n this.calc_end_point_dest(start_col, start_row, init_x, init_y).forEach(function (d) { end_points.push(d); });\n /*\n console.log(\"new set\");\n end_points.forEach(function(point) { console.log(point); });\n console.log(\"end set\");\n */\n return end_points;\n }\n if (cols_remaining !== 0 && elem_remaining > num_rows)\n start_col = start_col + init_x;\n }\n while (elem_remaining > num_rows) {\n let no_cont_cols;\n if (num_rows * cols_remaining < elem_remaining) {\n no_cont_cols = cols_remaining;\n const leftover_elem = elem_remaining - (no_cont_cols) * num_rows;\n no_cont_cols += Math.floor(leftover_elem / (this.row_limits[group_iter + 1] - this.row_limits[group_iter]));\n }\n else {\n no_cont_cols = Math.floor(elem_remaining / num_rows);\n }\n if (no_cont_cols > cols_remaining) {\n start_col = (init_x === 1) ? this.num_cols - 1 : 0;\n if (cols_remaining !== 0) {\n this.calc_end_point_dest(start_col, top_row, init_x, -1)\n .forEach(function (d) { end_points.push(d); });\n }\n no_cont_cols = cols_remaining;\n cols_remaining = this.num_cols;\n group_iter += 1;\n top_row = bottom_row;\n bottom_row = this.row_limits[group_iter];\n start_row = top_row;\n init_x = -1 * init_x;\n init_y = Math.pow(-1, no_cont_cols) * init_y * (-1);\n this.calc_end_point_dest(start_col, bottom_row - 1, (-1) * init_x, 1)\n .forEach(function (d) { end_points.push(d); });\n }\n else if (no_cont_cols === cols_remaining) {\n start_col = (init_x === 1) ? this.num_cols - 1 : 0;\n if (cols_remaining !== 0) {\n this.calc_end_point_dest(start_col, top_row, init_x, -1)\n .forEach(function (d) { end_points.push(d); });\n }\n no_cont_cols = cols_remaining;\n cols_remaining = this.num_cols;\n group_iter += 1;\n if (group_iter < this.row_limits.length) {\n top_row = bottom_row;\n bottom_row = this.row_limits[group_iter];\n start_row = top_row;\n init_x = -1 * init_x;\n init_y = Math.pow(-1, no_cont_cols) * init_y * (-1);\n across = true;\n }\n else {\n init_y = 1;\n init_x = 1;\n }\n }\n else {\n // The number of elements are such that the row group is\n // not exhausted.\n init_y = Math.pow(-1, (no_cont_cols)) * init_y;\n //As I am moving down this time, next time I will move up\n //and I might not reach the top row, it might be an end\n //point.\n start_row = (init_y === 1) ? top_row : bottom_row - 1;\n start_col = start_col + (init_x) * (no_cont_cols - 1);\n this.calc_end_point_source(start_col, start_row, (-1) * init_x, init_y).forEach(function (d) { end_points.push(d); });\n }\n elem_remaining -= (no_cont_cols * (num_rows));\n num_rows = bottom_row - top_row;\n //reset direction\n //this is an end point\n }\n //all elements are exhausted\n if (elem_remaining === 0) {\n // The column is exactly filled. In this case, the only end\n // point I need to add is the outer edge w.r.t. the direction\n // in which we are travelling\n start_row = (init_y === 1) ? bottom_row - 1 : top_row;\n init_x = (across) ? ((-1) * init_x) : init_x;\n this.calc_end_point_dest(start_col, start_row, init_x, init_y).forEach(function (d) { end_points.push(d); });\n }\n else {\n // The previous column was exactly filled and the last column\n // is partially filled\n init_y = -1 * init_y; // Since we are in the next column, the direction of y has to be reversed\n start_row = (init_y === 1) ? top_row : bottom_row - 1;\n start_col = (across) ? start_col : (start_col + (init_x));\n // this is the outer edge of the start of the last column w.r.t\n // the current direction of travel.\n this.calc_end_point_source(start_col, start_row, init_x * (-1), init_y).forEach(function (d) { end_points.push(d); });\n // The points corresponding to the cell at which we stop.\n current_row = start_row + (elem_remaining - 1) * init_y; // this is the row in which we end\n // Two points need to be added. The boundary of the last cell\n // in the y-direction.\n this.calc_end_point_dest(start_col, current_row, init_x, init_y).forEach(function (d) { end_points.push(d); });\n this.calc_end_point_dest(start_col, current_row, (-1) * init_x, init_y).forEach(function (d) { end_points.push(d); });\n }\n /*\n console.log(\"new set\");\n end_points.forEach(function(point) { console.log(point); });\n console.log(\"end set\");\n */\n return end_points;\n }\n create_bounding_path(elem, end_points) {\n const values = [];\n const editing_copy = end_points.slice();\n values.push(end_points[0]);\n editing_copy.splice(0, 1);\n //do union based on which direction you are trying to move in and\n //draw the path\n //best way seems to be horizaontal followed by vertical\n const props = ['x', 'y'];\n let iter = 0;\n let prop = props[iter % 2];\n let other_prop = props[(iter + 1) % 2];\n const curr_elem = values[0];\n let match = curr_elem[prop];\n let dim = curr_elem[other_prop];\n let max_iter = 2 * editing_copy.length;\n let final_val = 0;\n while (editing_copy.length > 1 && max_iter > 0) {\n const filtered_array = editing_copy.filter(function (elem) { return elem[prop] == match; });\n if (filtered_array.length > 0) {\n iter++;\n const min_elem = d3.min(filtered_array, function (elem) { return elem[other_prop]; });\n const max_elem = d3.max(filtered_array, function (elem) { return elem[other_prop]; });\n if (min_elem < dim && max_elem > dim) {\n if (prop == 'y') {\n if (this.x_direction == 1) {\n final_val = max_elem;\n }\n else {\n final_val = min_elem;\n }\n }\n else {\n // There are elements greater than and lesser than\n // reference value. I am trying to see if there are\n // multiple elements greater or lesser. If there is\n // only one in one of the directions, that is the\n // direction I draw the line in.\n const lesser_arr = filtered_array.filter(function (elem) { return elem[other_prop] < dim; });\n const greater_arr = filtered_array.filter(function (elem) { return elem[other_prop] > dim; });\n if (lesser_arr.length == 1) {\n final_val = min_elem;\n }\n else if (greater_arr.length == 1) {\n final_val = max_elem;\n }\n else {\n final_val = d3.max(lesser_arr, function (elem) { return elem[other_prop]; });\n }\n }\n }\n else {\n if (min_elem > dim) {\n final_val = min_elem;\n }\n else {\n final_val = max_elem;\n }\n }\n const match_elem = editing_copy.filter(function (elem) { return elem[prop] == match && elem[other_prop] == final_val; });\n match_elem.forEach(function (elem) { editing_copy.splice(editing_copy.indexOf(elem), 1); });\n const value = {};\n value[prop] = match;\n value[other_prop] = final_val;\n values.push(value);\n }\n else {\n final_val = dim;\n }\n //swap prop and other_prop\n const temp = prop;\n prop = other_prop;\n other_prop = temp;\n dim = match;\n match = final_val;\n max_iter--;\n }\n if (editing_copy.length > 0)\n values.push(editing_copy[0]);\n values.push(end_points[0]);\n const line = d3.line()\n .curve(d3.curveLinear)\n .x(function (d) { return d.x; })\n .y(function (d) { return d.y; });\n const bounding_path = d3.select(elem)\n .append('path')\n .attr(\"class\", \"bounding_path\")\n .attr('d', function () { return line(values); })\n .attr('fill', 'none')\n .style('stroke', this.model.get('group_stroke'))\n .style('stroke-width', 3);\n return bounding_path;\n }\n calc_end_point_source(curr_x, curr_y, x_direction, y_direction) {\n curr_y = (y_direction == 1) ? curr_y : curr_y + 1;\n curr_x = (x_direction == 1) ? curr_x : curr_x + 1;\n return [{ 'x': curr_x * this.column_width, 'y': curr_y * this.row_height }];\n }\n calc_end_point_dest(curr_x, curr_y, x_direction, y_direction) {\n curr_y = (y_direction == -1) ? curr_y : curr_y + 1;\n curr_x = (x_direction == -1) ? curr_x : curr_x + 1;\n return [{ 'x': curr_x * this.column_width, 'y': curr_y * this.row_height }];\n }\n}\nexports.MarketMap = MarketMap;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFya2V0TWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01hcmtldE1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7Ozs7O0FBRUgsK0RBQWlEO0FBQ2pELDhDQUFnQztBQUVoQyxtREFFNkI7QUFFN0IsK0NBRTJCO0FBRTNCLHVDQUF5QjtBQUN6Qiw4QkFBNEI7QUFDNUIscUpBQXFKO0FBQ3JKLHFDQUFnQztBQUNoQyxtRUFBcUQ7QUFDckQsMERBQStCO0FBRS9CLE1BQWEsU0FBVSxTQUFRLGVBQU07SUFFakMsTUFBTSxDQUFDLE9BQVE7UUFDWCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUVoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQyxJQUFJ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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-selection\"), require(\"d3-selection-multi\"));\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst _ = __importStar(require(\"underscore\"));\nconst Mark_1 = require(\"./Mark\");\nclass GridHeatMap extends Mark_1.Mark {\n render() {\n const base_render_promise = super.render();\n const that = this;\n // TODO: create_listeners is put inside the promise success handler\n // because some of the functions depend on child scales being\n // created. Make sure none of the event handler functions make that\n // assumption.\n this.displayed.then(function () {\n that.parent.tooltip_div.node().appendChild(that.tooltip_div.node());\n that.create_tooltip();\n });\n this.selected_indices = this.model.get(\"selected\");\n this.selected_style = this.model.get(\"selected_style\");\n this.unselected_style = this.model.get(\"unselected_style\");\n this.anchor_style = this.model.get(\"anchor_style\");\n this.display_el_classes = [\"heatmapcell\"];\n return base_render_promise.then(function () {\n that.event_listeners = {};\n that.process_interactions();\n that.create_listeners();\n that.compute_view_padding();\n that.draw();\n });\n }\n initialize_additional_scales() {\n const color_scale = this.scales.color;\n if (color_scale) {\n this.listenTo(color_scale, \"domain_changed\", function () {\n this.apply_styles();\n });\n color_scale.on(\"color_scale_range_changed\", this.apply_styles, this);\n }\n }\n set_ranges() {\n const row_scale = this.scales.row;\n if (row_scale) {\n // The y_range is reversed because we want the first row\n // to start at the top of the plotarea and not the bottom.\n const row_range = this.parent.padded_range(\"y\", row_scale.model);\n row_scale.set_range(row_range);\n // row_scale.set_range([row_range[1], row_range[0]]);\n }\n const col_scale = this.scales.column;\n if (col_scale) {\n col_scale.set_range(this.parent.padded_range(\"x\", col_scale.model));\n }\n }\n set_positional_scales() {\n const x_scale = this.scales.column, y_scale = this.scales.row;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n }\n expand_scale_domain(scale, data, mode, start) {\n // This function expands the domain so that the heatmap has the\n // minimum area needed to draw itself.\n let current_pixels;\n let min_diff;\n if (mode === \"expand_one\") {\n current_pixels = data.map(function (el) {\n return scale.scale(el);\n });\n const diffs = current_pixels.slice(1).map(function (el, index) {\n return el - current_pixels[index];\n });\n //TODO: Explain what is going on here.\n min_diff = 0;\n if (diffs[0] < 0) {\n start = !(start);\n // diffs are negative. So max instead of min\n min_diff = d3.max(diffs);\n }\n else {\n min_diff = d3.min(diffs);\n }\n if (start) {\n const new_pixel = current_pixels[current_pixels.length - 1] + min_diff;\n return [data[0], scale.invert(new_pixel)];\n }\n else {\n const new_pixel = current_pixels[0] - min_diff;\n return [scale.invert(new_pixel), data[current_pixels.length - 1]];\n }\n }\n else if (mode === \"expand_two\") {\n current_pixels = data.map(function (el) {\n return scale.scale(el);\n });\n min_diff = d3.min(current_pixels.slice(1).map(function (el, index) {\n return el - current_pixels[index];\n }));\n const new_end = current_pixels[current_pixels.length - 1] + min_diff;\n const new_start = current_pixels[0] - min_diff;\n return [scale.invert(new_start), scale.invert(new_end)];\n }\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:stroke\", this.update_stroke);\n this.listenTo(this.model, \"change:opacity\", this.update_opacity);\n this.d3el.on(\"mouseover\", _.bind(function () { this.event_dispatcher(\"mouse_over\"); }, this))\n .on(\"mousemove\", _.bind(function () { this.event_dispatcher(\"mouse_move\"); }, this))\n .on(\"mouseout\", _.bind(function () { this.event_dispatcher(\"mouse_out\"); }, this));\n this.listenTo(this.model, \"data_updated\", this.draw);\n this.listenTo(this.model, \"change:tooltip\", this.create_tooltip);\n this.listenTo(this.parent, \"bg_clicked\", function () {\n this.event_dispatcher(\"parent_clicked\");\n });\n this.model.on_some_change([\"display_format\", \"font_style\"], this.update_labels, this);\n this.listenTo(this.model, \"change:selected\", this.update_selected);\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n }\n click_handler(args) {\n const num_cols = this.model.colors[0].length;\n const index = args.row_num * num_cols + args.column_num;\n const row = args.row_num;\n const column = args.column_num;\n const that = this;\n let idx = Array.from(this.model.get(\"selected\") || []);\n let selected = this._cell_nums_from_indices(idx);\n const elem_index = selected.indexOf(index);\n const accelKey = d3GetEvent().ctrlKey || d3GetEvent().metaKey;\n //TODO: This is a shim for when accelKey is supported by chrome.\n // index of slice i. Checking if it is already present in the\n // list\n if (elem_index > -1 && accelKey) {\n // if the index is already selected and if ctrl key is\n // pressed, remove the element from the list\n idx.splice(elem_index, 1);\n }\n else {\n if (!accelKey) {\n selected = [];\n idx = [];\n }\n idx.push([row, column]);\n selected.push(that._cell_nums_from_indices([[row, column]])[0]);\n if (d3GetEvent().shiftKey) {\n //If shift is pressed and the element is already\n //selected, do not do anything\n if (elem_index > -1) {\n return;\n }\n //Add elements before or after the index of the current\n //slice which has been clicked\n const row_index = (selected.length !== 0) ?\n that.anchor_cell_index[0] : row;\n const col_index = (selected.length !== 0) ?\n that.anchor_cell_index[1] : column;\n _.range(Math.min(row, row_index), Math.max(row, row_index) + 1).forEach(function (i) {\n _.range(Math.min(column, col_index), Math.max(column, col_index) + 1).forEach(function (j) {\n const cell_num = that._cell_nums_from_indices([[i, j]])[0];\n if (selected.indexOf(cell_num) === -1) {\n selected.push(cell_num);\n idx.push([i, j]);\n }\n });\n });\n }\n else {\n // updating the array containing the slice indexes selected\n // and updating the style\n this.anchor_cell_index = [row, column];\n }\n }\n this.model.set(\"selected\", ((idx.length === 0) ? null : idx), { updated_view: this });\n this.touch();\n let e = d3GetEvent();\n if (!e) {\n e = window.event;\n }\n if (e.cancelBubble !== undefined) { // IE\n e.cancelBubble = true;\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n e.preventDefault();\n this.selected_indices = idx;\n this.apply_styles();\n }\n update_selected(model, value) {\n this.selected_indices = value;\n this.apply_styles();\n }\n set_style_on_elements(style, indices, elements) {\n // If the index array is undefined or of length=0, exit the\n // function without doing anything\n if (!indices || indices.length === 0 && (!elements || elements.length === 0)) {\n return;\n }\n // Also, return if the style object itself is blank\n if (Object.keys(style).length === 0) {\n return;\n }\n elements = (!elements || elements.length === 0) ? this._filter_cells_by_cell_num(this._cell_nums_from_indices(indices)) : elements;\n elements.styles(style);\n }\n set_default_style(indices, elements) {\n // For all the elements with index in the list indices, the default\n // style is applied.\n //\n if (!indices || indices.length === 0 && (!elements || elements.length === 0)) {\n return;\n }\n elements = (!elements || elements.length === 0) ? this._filter_cells_by_cell_num(this._cell_nums_from_indices(indices)) : elements;\n const stroke = this.model.get(\"stroke\");\n const opacity = this.model.get(\"opacity\");\n const that = this;\n elements.style(\"fill\", function (d) {\n return that.get_element_fill(d);\n })\n .style(\"opacity\", opacity)\n .style(\"stroke\", stroke);\n }\n clear_style(style_dict, indices, elements) {\n // Function to clear the style of a dict on some or all the elements of the\n // chart.If indices is null, clears the style on all elements. If\n // not, clears on only the elements whose indices are mathcing.\n //\n // If elements are passed, then indices are ignored and the style\n // is cleared only on the elements that are passed.\n //\n // This can be used if we decide to accommodate more properties than\n // those set by default. Because those have to cleared specifically.\n //\n if (Object.keys(style_dict).length === 0) {\n // No style to clear\n return;\n }\n if (!elements || elements.length === 0) {\n if (indices) {\n elements = this._filter_cells_by_cell_num(this._cell_nums_from_indices(indices));\n }\n else {\n elements = this.display_cells;\n }\n }\n const clearing_style = {};\n for (let key in style_dict) {\n clearing_style[key] = null;\n }\n elements.styles(clearing_style);\n }\n _filter_cells_by_cell_num(cell_numbers) {\n if (cell_numbers === null || cell_numbers === undefined) {\n return [];\n }\n return this.display_cells.filter(function (el) {\n return (cell_numbers.indexOf(el._cell_num) !== -1);\n });\n }\n selected_style_updated(model, style) {\n this.selected_style = style;\n this.clear_style(model.previous(\"selected_style\"), this.selected_indices, this.selected_elements);\n this.style_updated(style, this.selected_indices, this.selected_elements);\n }\n unselected_style_updated(model, style) {\n this.unselected_style = style;\n this.clear_style(model.previous(\"unselected_style\"), [], this.unselected_elements);\n this.style_updated(style, [], this.unselected_elements);\n }\n apply_styles() {\n const num_rows = this.model.colors.length;\n const num_cols = this.model.colors[0].length;\n this.clear_style(this.selected_style);\n this.clear_style(this.unselected_style);\n this.clear_style(this.anchor_style);\n this.set_default_style([], this.display_cells);\n const selected_cell_nums = this._cell_nums_from_indices(this.selected_indices);\n const unsel_cell_nums = (selected_cell_nums === null || selected_cell_nums.length === 0) ? []\n : _.difference(_.range(num_rows * num_cols), selected_cell_nums);\n this.selected_elements = this._filter_cells_by_cell_num(selected_cell_nums);\n this.set_style_on_elements(this.selected_style, this.selected_indices, this.selected_elements);\n this.unselected_elements = this._filter_cells_by_cell_num(unsel_cell_nums);\n this.set_style_on_elements(this.unselected_style, [], this.unselected_elements);\n if (this.anchor_cell_index !== null && this.anchor_cell_index !== undefined) {\n const anchor_num = this._cell_nums_from_indices([this.anchor_cell_index]);\n this.anchor_element = this._filter_cells_by_cell_num(anchor_num);\n this.set_style_on_elements(this.anchor_style, [], this.anchor_element);\n }\n }\n style_updated(new_style, indices, elements) {\n // reset the style of the elements and apply the new style\n this.set_default_style(indices, elements);\n this.set_style_on_elements(new_style, indices, elements);\n }\n reset_selection() {\n this.model.set(\"selected\", null);\n this.touch();\n this.selected_indices = null;\n this.clear_style(this.selected_style);\n this.clear_style(this.unselected_style);\n this.clear_style(this.anchor_style);\n this.set_default_style([], this.display_cells);\n }\n relayout() {\n this.set_ranges();\n this.compute_view_padding();\n //TODO: The call to draw has to be changed to something less\n //expensive.\n this.draw();\n }\n _cell_nums_from_indices(indices) {\n if (indices === null || indices === undefined) {\n return null;\n }\n const num_cols = this.model.colors[0].length;\n return indices.map(function (i) { return i[0] * num_cols + i[1]; });\n }\n invert_point(pixel) {\n // For now, an index selector is not supported for the heatmap\n }\n selector_changed(point_selector, rect_selector) {\n if (point_selector === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return [];\n }\n const col_indices = _.range(this.model.colors[0].length);\n const row_indices = _.range(this.model.colors.length);\n const that = this;\n const sel_cols = _.filter(col_indices, function (index) {\n return rect_selector([that.column_pixels[index], []]);\n });\n const sel_rows = _.filter(row_indices, function (index) {\n return rect_selector([[], that.row_pixels[index]]);\n });\n let selected = sel_cols.map(function (s) {\n return sel_rows.map(function (r) {\n return [r, s];\n });\n });\n selected = _.flatten(selected, true);\n this.model.set(\"selected\", selected);\n this.touch();\n }\n draw() {\n this.set_ranges();\n const that = this;\n const num_rows = this.model.colors.length;\n const num_cols = this.model.colors[0].length;\n const row_scale = this.scales.row;\n const column_scale = this.scales.column;\n const row_start_aligned = this.model.get(\"row_align\") === \"start\";\n const col_start_aligned = this.model.get(\"column_align\") === \"start\";\n let new_domain;\n if (this.model.modes.row !== \"middle\" && this.model.modes.row !== \"boundaries\") {\n new_domain = this.expand_scale_domain(row_scale, this.model.rows, this.model.modes.row, (row_start_aligned));\n if (d3.min(new_domain) < d3.min(row_scale.model.domain) || d3.max(new_domain) > d3.max(row_scale.model.domain)) {\n // Update domain if domain has changed\n row_scale.model.compute_and_set_domain(new_domain, row_scale.model.model_id);\n }\n }\n if (this.model.modes.column !== \"middle\" && this.model.modes.column !== \"boundaries\") {\n new_domain = this.expand_scale_domain(column_scale, this.model.columns, this.model.modes.column, col_start_aligned);\n if (d3.min(new_domain) < d3.min(column_scale.model.domain) || d3.max(new_domain) > d3.max(column_scale.model.domain)) {\n // Update domain if domain has changed\n column_scale.model.compute_and_set_domain(new_domain, column_scale.model.model_id);\n }\n }\n const row_plot_data = this.get_tile_plotting_data(row_scale, this.model.rows, this.model.modes.row, row_start_aligned);\n const column_plot_data = this.get_tile_plotting_data(column_scale, this.model.columns, this.model.modes.column, col_start_aligned);\n this.row_pixels = row_plot_data.start.map(function (d, i) {\n return [d, d + row_plot_data.widths[i]];\n });\n this.column_pixels = column_plot_data.start.map(function (d, i) {\n return [d, d + column_plot_data.widths[i]];\n });\n this.display_rows = this.d3el.selectAll(\".heatmaprow\")\n .data(_.range(num_rows))\n .join(\"g\")\n .attr(\"class\", \"heatmaprow\")\n .attr(\"transform\", function (d) {\n return \"translate(0, \" + row_plot_data.start[d] + \")\";\n });\n const col_nums = _.range(num_cols);\n const row_nums = _.range(num_rows);\n const data_array = row_nums.map(function (row) {\n return col_nums.map(function (col) {\n return that.model.mark_data[row * num_cols + col];\n });\n });\n this.display_cells = this.display_rows.selectAll(\".heatmapcell\")\n .data(function (d, i) {\n return data_array[i];\n })\n .join(\"rect\")\n .attr(\"class\", \"heatmapcell\")\n .on(\"click\", _.bind(function () {\n this.event_dispatcher(\"element_clicked\");\n }, this));\n this.display_cells\n .attr(\"x\", function (d, i) { return column_plot_data.start[i]; })\n .attr(\"y\", 0)\n .attr(\"width\", function (d, i) { return column_plot_data.widths[i]; })\n .attr(\"height\", function (d) { return row_plot_data.widths[d.row_num]; });\n // cell labels\n this.display_cell_labels = this.display_rows.selectAll(\".heatmapcell_label\")\n .data(function (d, i) {\n return data_array[i];\n })\n .join(\"text\")\n .attr(\"class\", \"heatmapcell_label\")\n .attr(\"x\", function (d, i) { return column_plot_data.start[i] + column_plot_data.widths[i] / 2; })\n .attr(\"y\", function (d) { return row_plot_data.widths[d.row_num] / 2; })\n .style(\"text-anchor\", \"middle\")\n .style(\"fill\", \"black\")\n .style(\"pointer-events\", \"none\")\n .style(\"dominant-baseline\", \"central\");\n this.apply_styles();\n this.update_labels();\n this.display_cells.on(\"click\", function (d, i) {\n return that.event_dispatcher(\"element_clicked\", {\n data: d.color,\n index: i,\n row_num: d.row_num,\n column_num: d.column_num\n });\n });\n }\n update_stroke(model, value) {\n this.display_cells.style(\"stroke\", value);\n }\n update_opacity(model, value) {\n this.display_cells.style(\"opacity\", value);\n }\n update_labels() {\n const display_format_str = this.model.get(\"display_format\");\n const display_format = display_format_str ? d3.format(display_format_str) : null;\n let fonts = this.d3el.selectAll(\".heatmapcell_label\")\n .text(function (d, i) { return display_format ? display_format(d.color) : null; });\n const fontStyle = this.model.get(\"font_style\");\n for (const styleKey in fontStyle) {\n fonts = fonts.style(styleKey, fontStyle[styleKey]);\n }\n }\n get_tile_plotting_data(scale, data, mode, start) {\n // This function returns the starting points and widths of the\n // cells based on the parameters passed.\n //\n // scale is the scale and data is the data for which the plot data\n // is to be generated. mode refers to the expansion of the data to\n // generate the plotting data and start is a boolean indicating the\n // alignment of the data w.r.t the cells.\n let start_points = [];\n let widths = [];\n data = Array.from(data); // copy to Array\n if (mode === \"middle\") {\n start_points = data.map(function (d) { return scale.scale(d); });\n widths = data.map(function (d) { return scale.scale.bandwidth(); });\n return { \"start\": start_points, \"widths\": widths };\n }\n if (mode === \"boundaries\") {\n const pixel_points = data.map(function (d) {\n return scale.scale(d);\n });\n widths = [];\n for (let i = 1; i < pixel_points.length; ++i) {\n widths[i - 1] = Math.abs(pixel_points[i] - pixel_points[i - 1]);\n }\n start_points = pixel_points[1] > pixel_points[0] ?\n pixel_points.slice(0, -1) : pixel_points.slice(1);\n return {\n \"start\": start_points,\n \"widths\": widths\n };\n }\n if (mode === \"expand_one\") {\n let bounds;\n if (start) {\n // Start points remain the same as the data.\n start_points = data.map(function (d) {\n return scale.scale(d);\n });\n widths = start_points.slice(1).map(function (d, ind) {\n // Absolute value is required as the order of the data\n // can be increasing or decreasing in terms of pixels\n return Math.abs(d - start_points[ind]);\n });\n // Now we have n-1 widths. We have to add the last or the\n // first width depending on scale is increasing or\n // decreasing.\n bounds = d3.max(scale.scale.range());\n if (start_points[0] < start_points[1]) {\n widths = Array.prototype.concat(widths, [Math.abs(bounds - d3.max(start_points))]);\n }\n else {\n widths = Array.prototype.concat([Math.abs(bounds - d3.max(start_points))], widths);\n }\n }\n else {\n start_points = data.map(function (d) {\n return scale.scale(d);\n });\n widths = start_points.slice(1).map(function (d, ind) {\n // Absolute value is required as the order of the data\n // can be increasing or decreasing in terms of pixels\n return Math.abs(d - start_points[ind]);\n });\n bounds = d3.min(scale.scale.range());\n bounds = d3.min(scale.scale.range());\n if (start_points[1] > start_points[0]) {\n // The point corresponding to the bounds is added at\n // the start of the array. Hence it has to be added to\n // the start_points and the last start_point can be\n // removed.\n start_points.unshift(Math.abs(bounds));\n widths.splice(0, 0, start_points[1] - start_points[0]);\n start_points.pop();\n }\n else {\n // The point for the bounds is added to the end of the\n // array. The first start point can now be removed as\n // this will be the last end point.\n widths = Array.prototype.concat(widths, [Math.abs(bounds - start_points.slice(-1)[0])]);\n start_points = Array.prototype.concat(start_points, bounds);\n start_points.splice(0, 1);\n }\n }\n return {\n \"widths\": widths,\n \"start\": start_points\n };\n }\n if (mode === \"expand_two\") {\n start_points = data.map(function (d) {\n return scale.scale(d);\n });\n const is_positive = (start_points[1] - start_points[0]) > 0;\n let bound = (is_positive) ? d3.min(scale.scale.range()) : d3.max(scale.scale.range());\n start_points.splice(0, 0, bound);\n widths = start_points.slice(1).map(function (d, ind) {\n return Math.abs(d - start_points[ind]);\n });\n bound = (is_positive) ? d3.max(scale.scale.range()) : d3.min(scale.scale.range());\n widths[widths.length] = Math.abs(bound - start_points.slice(-1)[0]);\n return { \"start\": start_points, \"widths\": widths };\n }\n }\n get_element_fill(dat) {\n if (dat.color === null) {\n return this.model.get(\"null_color\");\n }\n return this.scales.color.scale(dat.color);\n }\n process_click(interaction) {\n super.process_click(interaction);\n if (interaction === 'select') {\n this.event_listeners.parent_clicked = this.reset_selection;\n this.event_listeners.element_clicked = this.click_handler;\n }\n }\n compute_view_padding() {\n }\n}\nexports.GridHeatMap = GridHeatMap;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JpZEhlYXRNYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvR3JpZEhlYXRNYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6Qiw4QkFBNEI7QUFDNUIsMEdBQTBHO0FBQzFHLE1BQU0sVUFBVSxHQUFHLGNBQVcsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSw4Q0FBZ0M7QUFDaEMsaUNBQTZCO0FBRzdCLE1BQWEsV0FBWSxTQUFRLFdBQUk7SUFFakMsTUFBTTtRQUNGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUVsQixtRUFBbUU7UUFDbkUsNkRBQTZEO1FBQzdELG1FQUFtRTtRQUNuRSxjQUFjO1FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst d3 = __importStar(require(\"d3\"));\nconst serialize = __importStar(require(\"./serialize\"));\nconst version_1 = require(\"./version\");\nclass MarketMapModel extends widgets.WidgetModel {\n defaults() {\n return Object.assign({}, widgets.WidgetModel.prototype.defaults(), { _model_name: \"MarketMapModel\", _view_name: \"MarketMap\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, map_width: 1080, map_height: 800, names: [], groups: [], display_text: [], ref_data: undefined, title: \"\", tooltip_fields: [], tooltip_formats: [], show_groups: false, cols: 0, rows: 0, row_groups: 1, colors: d3.scaleOrdinal(d3.schemeCategory10).range(), scales: {}, axes: [], color: [], map_margin: {\n top: 50,\n right: 50,\n left: 50,\n bottom: 50\n }, preserve_aspect: false, stroke: \"white\", group_stroke: \"black\", selected_stroke: \"dodgerblue\", hovered_stroke: \"orangered\", font_style: {}, title_style: {}, selected: [], enable_hover: true, enable_select: true, tooltip_widget: null });\n }\n}\nMarketMapModel.serializers = Object.assign({}, widgets.WidgetModel.serializers, { scales: { deserialize: widgets.unpack_models }, axes: { deserialize: widgets.unpack_models }, tooltip_widget: { deserialize: widgets.unpack_models }, style: { deserialize: widgets.unpack_models }, layout: { deserialize: widgets.unpack_models }, names: serialize.array_or_json, groups: serialize.array_or_json, display_text: serialize.array_or_json, color: serialize.array_or_json });\nexports.MarketMapModel = MarketMapModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFya2V0TWFwTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTWFya2V0TWFwTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILCtEQUFpRDtBQUNqRCx1Q0FBeUI7QUFDekIsdURBQXlDO0FBQ3pDLHVDQUF5QztBQUV6QyxNQUFhLGNBQWUsU0FBUSxPQUFPLENBQUMsV0FBVztJQUVuRCxRQUFRO1FBQ0oseUJBQVcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQy9DLFdBQVcsRUFBRSxnQkFBZ0IsRUFDN0IsVUFBVSxFQUFFLFdBQVcsRUFDdkIsYUFBYSxFQUFFLFFBQVEsRUFDdkIsWUFBWSxFQUFFLFFBQVEsRUFDdEIscUJBQXFCLEVBQUUsc0JBQVksRUFDbkMsb0JBQW9CLEVBQUUsc0JBQVksRUFFbEMsU0FBUyxFQUFFLElBQUksRUFDZixVQUFVLEVBQUUsR0FBRyxFQUVmLEtBQUssRUFBRSxFQUFFLEVBQ1QsTUFBTSxFQUFFLEVBQUUsRUFDVixZQUFZLEVBQUUsRUFBRSxFQUNoQixRQUFRLEVBQUUsU0FBUyxFQUNuQixLQUFLLEVBQUUsRUFBRSxFQUVULGNBQWMsRUFBRSxFQUFFLEVBQ2xCLGVBQWUsRUFBRSxFQUFFLEVBQ25CLFdBQVcsRUFBRSxLQUFLLEVBRWxCLElBQUksRUFBRSxDQUFDLEVBQ1AsSUFBSSxFQUFFLENBQUMsRUFFUCxVQUFVLEVBQUUsQ0FBQyxFQUNiLE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUNwRCxNQUFNLEVBQUUsRUFBRSxFQUNWLElBQUksRUFBRSxFQUFFLEVBQ1IsS0FBSyxFQUFFLEVBQUUsRUFDVCxVQUFVLEVBQUU7Z0JBQ1IsR0FBRyxFQUFFLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsTUFBTSxFQUFFLEVBQUU7YUFDYixFQUNELGVBQWUsRUFBRSxLQUFLLEVBQ3RCLE1BQU0sRUFBRSxPQUFPLEVBQ2YsWUFBWSxFQUFFLE9BQU8sRUFDckIsZUFBZSxFQUFFLFlBQVksRUFDN0IsY0FBYyxFQUFFLFdBQVcsRUFDM0IsVUFBVSxFQUFFLEVBQUUsRUFDZCxXQUFXLEVBQUUsRUFBRSxFQUVmLFFBQVEsRUFBRSxFQUFFLEVBQ1osWUFBWSxFQUFFLElBQUksRUFDbEIsYUFBYSxFQUFFLElBQUksRUFDbkIsY0FBYyxFQUFFLElBQUksSUFDdEI7SUFDTixDQUFDOztBQUNNLDBCQUFXLHFCQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUNwRCxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUM5QyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUM1QyxjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUN0RCxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUM3QyxNQUFNLEVBQUcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUMvQyxLQUFLLEVBQUUsU0FBUyxDQUFDLGFBQWEsRUFDOUIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxhQUFhLEVBQy9CLFlBQVksRUFBRSxTQUFTLENBQUMsYUFBYSxFQUNyQyxLQUFLLEVBQUUsU0FBUyxDQUFDLGFBQWEsSUFDakM7QUE5REwsd0NBK0RDIn0=","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3-selection\"));\nconst _ = __importStar(require(\"underscore\"));\nconst Mark_1 = require(\"./Mark\");\nclass HeatMap extends Mark_1.Mark {\n render() {\n const base_render_promise = super.render();\n const that = this;\n // TODO: create_listeners is put inside the promise success handler\n // because some of the functions depend on child scales being\n // created. Make sure none of the event handler functions make that\n // assumption.\n this.displayed.then(function () {\n that.parent.tooltip_div.node().appendChild(that.tooltip_div.node());\n that.create_tooltip();\n });\n this.image = d3.select(this.el)\n .append(\"image\")\n .classed(\"heatmap\", true)\n .attr(\"width\", this.parent.width)\n .attr(\"height\", this.parent.height);\n this.canvas = document.createElement(\"canvas\");\n return base_render_promise.then(function () {\n that.event_listeners = {};\n that.process_interactions();\n that.create_listeners();\n that.compute_view_padding();\n that.draw();\n });\n }\n set_ranges() {\n const x_scale = this.scales.x;\n if (x_scale) {\n const x_range = this.parent.padded_range(\"x\", x_scale.model);\n x_scale.set_range(x_range);\n }\n const y_scale = this.scales.y;\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n }\n }\n set_positional_scales() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n }\n initialize_additional_scales() {\n const color_scale = this.scales.color;\n if (color_scale) {\n this.listenTo(color_scale, \"domain_changed\", function () {\n this.draw();\n });\n color_scale.on(\"color_scale_range_changed\", this.draw, this);\n }\n }\n create_listeners() {\n super.create_listeners();\n this.d3el.on(\"mouseover\", _.bind(function () { this.event_dispatcher(\"mouse_over\"); }, this))\n .on(\"mousemove\", _.bind(function () { this.event_dispatcher(\"mouse_move\"); }, this))\n .on(\"mouseout\", _.bind(function () { this.event_dispatcher(\"mouse_out\"); }, this));\n this.listenTo(this.model, \"data_updated\", this.draw);\n this.listenTo(this.model, \"change:tooltip\", this.create_tooltip);\n this.listenTo(this.parent, \"bg_clicked\", function () {\n this.event_dispatcher(\"parent_clicked\");\n });\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n }\n click_handler(args) { }\n relayout() {\n this.set_ranges();\n this.compute_view_padding();\n this.draw();\n }\n drawCanvas() {\n this.image.attr(\"href\", this.canvas.toDataURL(\"image/png\"));\n }\n draw() {\n this.set_ranges();\n const plottingData = this.getPlottingData();\n this.canvas.setAttribute('width', plottingData.totalWidth);\n this.canvas.setAttribute('height', plottingData.totalHeight);\n const ctx = this.canvas.getContext('2d');\n const colors = this.model.mark_data.color;\n colors.forEach((row, i) => {\n const height = plottingData.heights[i];\n const y = plottingData.yOrigin + plottingData.yStartPoints[i];\n row.forEach((d, j) => {\n const width = plottingData.widths[j];\n const x = plottingData.xOrigin + plottingData.xStartPoints[j];\n ctx.fillStyle = this.getElementFill(d);\n ctx.fillRect(x, y, this.expandRect(width), this.expandRect(height));\n });\n });\n this.image.attr(\"width\", plottingData.totalWidth)\n .attr(\"height\", plottingData.totalHeight)\n .attr(\"x\", plottingData.x0)\n .attr(\"y\", plottingData.y0);\n this.drawCanvas();\n }\n expandRect(value) {\n // Add 0.5px to width and height to fill gaps between rectangles\n return value > 0 ? value + 0.5 : value - 0.5;\n }\n getPlottingData() {\n const xData = Array.from(this.model.mark_data.x).map(this.scales.x.scale);\n const yData = Array.from(this.model.mark_data.y).map(this.scales.y.scale);\n const xReverse = this.scales.x.model.get('reverse');\n const yReverse = this.scales.y.model.get('reverse');\n const padding = this.getPadding(xData, yData);\n const widths = this.computeRectSizes(xData, padding.left, padding.right);\n const heights = this.computeRectSizes(yData, padding.bottom, padding.top, true);\n const totalWidth = Math.abs((xData[xData.length - 1] - xData[0]) + padding.left + padding.right);\n const totalHeight = Math.abs((yData[0] - yData[yData.length - 1]) + padding.top + padding.bottom);\n const x0 = xData[0] - padding.left;\n const y0 = yData[yData.length - 1] - padding.top;\n const xStartPoints = xData.map((d, i) => {\n if (i == 0) {\n return 0;\n }\n else {\n return (d + xData[i - 1]) * 0.5 - x0;\n }\n });\n const yStartPoints = yData.map((d, i) => {\n if (i == yData.length - 1) {\n return 0;\n }\n else {\n return (d + yData[i + 1]) * 0.5 - y0;\n }\n });\n return {\n widths, heights,\n totalWidth, totalHeight,\n xOrigin: xReverse ? totalWidth : 0,\n yOrigin: yReverse ? totalHeight : 0,\n xStartPoints, yStartPoints,\n x0: xReverse ? x0 - totalWidth : x0,\n y0: yReverse ? y0 - totalHeight : y0,\n };\n }\n getPadding(xData, yData) {\n const numCols = xData.length;\n const numRows = yData.length;\n return {\n left: (xData[1] - xData[0]) * 0.5,\n right: (xData[numCols - 1] - xData[numCols - 2]) * 0.5,\n bottom: -(yData[1] - yData[0]) * 0.5,\n top: -(yData[numRows - 1] - yData[numRows - 2]) * 0.5\n };\n }\n computeRectSizes(data, padding1, padding2, reversed = false) {\n const factor = reversed ? -1 : 1;\n return data.map((d, i) => {\n if (i == 0) {\n return factor * (data[1] - d) * 0.5 + padding1;\n }\n else if (i == data.length - 1) {\n return factor * (d - data[i - 1]) * 0.5 + padding2;\n }\n else {\n return factor * (data[i + 1] - data[i - 1]) * 0.5;\n }\n });\n }\n getElementFill(color) {\n if (color === null) {\n return this.model.get(\"null_color\");\n }\n return this.scales.color.scale(color);\n }\n clear_style(style_dict, indices, elements) {\n }\n compute_view_padding() {\n }\n set_default_style(indices, elements) {\n }\n set_style_on_elements(style, indices, elements) {\n }\n}\nexports.HeatMap = HeatMap;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhdE1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9IZWF0TWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCx1Q0FBeUI7QUFDekIsc0RBQXNEO0FBQ3RELDhDQUFnQztBQUNoQyxpQ0FBOEI7QUFFOUIsTUFBYSxPQUFRLFNBQVEsV0FBSTtJQUU3QixNQUFNO1FBQ0YsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWxCLG1FQUFtRTtRQUNuRSw2REFBNkQ7UUFDN0QsbUVBQW1FO1FBQ25FLGNBQWM7UUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDZixPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQzthQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2hDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFL0MsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFVBQVU7UUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFHLE9BQU8sRUFBRTtZQUNSLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5QjtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUcsT0FBTyxFQUFFO1lBQ1IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDbkU7SUFDTCxDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQUU7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQUU7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsNEJBQTRCO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3RDLElBQUcsV0FBVyxFQUFFO1lBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztZQUNILFdBQVcsQ0FBQyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNoRTtJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFhLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN2RixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbEYsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxhQUFhLENBQUUsSUFBSSxJQUFHLENBQUM7SUFFdkIsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTdELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTlELEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUQsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEUsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDO2FBQzVDLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQzthQUN4QyxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUM7YUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSztRQUNaLGdFQUFnRTtRQUNoRSxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDakQsQ0FBQztJQUVELGVBQWU7UUFDWCxNQUFNLEtBQUssR0FBa0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekYsTUFBTSxLQUFLLEdBQWtCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWhGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEcsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUVqRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFBRSxPQUFPLENBQUMsQ0FBQzthQUFFO2lCQUNwQjtnQkFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO2FBQUU7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQUU7aUJBQ25DO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7YUFBRTtRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDSCxNQUFNLEVBQUUsT0FBTztZQUNmLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsWUFBWSxFQUFFLFlBQVk7WUFDMUIsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ3ZDLENBQUM7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLO1FBQ25CLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUU3QixPQUFPO1lBQ0gsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7WUFDakMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztZQUNsRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHO1lBQ3BDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztTQUNwRCxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsR0FBQyxLQUFLO1FBQ3JELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNSLE9BQU8sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7YUFDbEQ7aUJBQ0ksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO2FBQ3REO2lCQUNJO2dCQUNELE9BQU8sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ3JEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7U0FDdEM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVyxDQUFDLFVBQVUsRUFBRSxPQUFRLEVBQUUsUUFBUztJQUMzQyxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsUUFBUztJQUNwQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFTO0lBQy9DLENBQUM7Q0FJSjtBQXBORCwwQkFvTkMifQ==","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass HeatMapModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"HeatMapModel\", _view_name: \"HeatMap\", x: [], y: [], color: null, scales_metadata: {\n x: { orientation: \"horizontal\", dimension: \"x\" },\n y: { orientation: \"vertical\", dimension: \"y\" },\n color: { dimension: \"color\" }\n }, null_color: \"black\" });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"x\", \"y\", \"color\"], this.update_data, this);\n // FIXME: replace this with on(\"change:preserve_domain\"). It is not done here because\n // on_some_change depends on the GLOBAL backbone on(\"change\") handler which\n // is called AFTER the specific handlers on(\"change:foobar\") and we make that\n // assumption.\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.update_data();\n this.update_domains();\n }\n update_data() {\n this.dirty = true;\n // Handling data updates\n this.mark_data = {\n x: this.get(\"x\"),\n y: this.get(\"y\"),\n color: this.get(\"color\")\n };\n this.update_domains();\n this.dirty = false;\n this.trigger(\"data_updated\");\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n const scales = this.get(\"scales\");\n const x_scale = scales.x, y_scale = scales.y;\n const color_scale = scales.color;\n const flat_colors = [].concat.apply([], this.mark_data.color.map((x) => Array.prototype.slice.call(x, 0)));\n if (!this.get(\"preserve_domain\").x) {\n x_scale.compute_and_set_domain(this.mark_data.x, this.model_id + \"_x\");\n }\n else {\n x_scale.del_domain([], this.model_id + \"_x\");\n }\n if (!this.get(\"preserve_domain\").y) {\n y_scale.compute_and_set_domain(this.mark_data.y, this.model_id + \"_y\");\n }\n else {\n y_scale.del_domain([], this.model_id + \"_y\");\n }\n if (color_scale !== null && color_scale !== undefined) {\n if (!this.get(\"preserve_domain\").color) {\n color_scale.compute_and_set_domain(flat_colors, this.model_id + \"_color\");\n }\n else {\n color_scale.del_domain([], this.model_id + \"_color\");\n }\n }\n }\n get_data_dict(data, index) {\n return data;\n }\n}\nHeatMapModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { x: serialize.array_or_json, y: serialize.array_or_json, color: serialize.array_or_json });\nexports.HeatMapModel = HeatMapModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhdE1hcE1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0hlYXRNYXBNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7Ozs7Ozs7O0FBRUgsMkNBQXdDO0FBQ3hDLHVEQUF5QztBQUV6QyxNQUFhLFlBQWEsU0FBUSxxQkFBUztJQUV2QyxRQUFRO1FBQ0oseUJBQVcscUJBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3JDLFdBQVcsRUFBRSxjQUFjLEVBQzNCLFVBQVUsRUFBRSxTQUFTLEVBQ3JCLENBQUMsRUFBRSxFQUFFLEVBQ0wsQ0FBQyxFQUFFLEVBQUUsRUFDTCxLQUFLLEVBQUUsSUFBSSxFQUNYLGVBQWUsRUFBRTtnQkFDYixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2hELENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDOUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTthQUNoQyxFQUNELFVBQVUsRUFBRSxPQUFPLElBQ3JCO0lBQ04sQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTztRQUMxQixLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pFLHFGQUFxRjtRQUNyRiwyRUFBMkU7UUFDM0UsNkVBQTZFO1FBQzdFLGNBQWM7UUFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLElBQUks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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst version_1 = require(\"./version\");\nconst _ = __importStar(require(\"underscore\"));\nclass ToolbarModel extends widgets.DOMWidgetModel {\n defaults() {\n return Object.assign({}, widgets.DOMWidgetModel.prototype.defaults(), { _model_name: \"ToolbarModel\", _view_name: \"Toolbar\", _model_module: \"bqplot\", _view_module: \"bqplot\", _model_module_version: version_1.semver_range, _view_module_version: version_1.semver_range, figure: undefined, _panning: false, _panzoom: null });\n }\n // Backbone attributes:\n // - _panning: Bool\n // Whether one is currently panning - zooming the specified figure.\n // - _panzoom: Instance of Panzoom or undefined:\n // The created panzoom interaction. It is undefined at first.\n // Attributes:\n // - cached_interaction: Instance of Interaction or null or undefined.\n // The cached interaction of the Figure. It is undefined at first\n // and can take the value of the figure interaction, which can be\n // null.\n panzoom() {\n const figure = this.get(\"figure\");\n if (this.get(\"_panning\")) {\n if (figure) {\n figure.set(\"interaction\", this.cached_interaction);\n figure.save_changes();\n }\n this.set(\"_panning\", false);\n this.save_changes();\n }\n else {\n if (figure) {\n this.cached_interaction = figure.get(\"interaction\");\n const panzoom = this.get(\"_panzoom\");\n if (panzoom) {\n figure.set(\"interaction\", panzoom);\n figure.save_changes();\n }\n else {\n this._create_panzoom_model(figure).then((model) => {\n this.set(\"_panzoom\", model);\n this.save_changes();\n figure.set(\"interaction\", model);\n figure.save_changes();\n });\n }\n }\n this.set(\"_panning\", true);\n this.save_changes();\n }\n }\n reset() {\n /**\n * Reset the scales, delete the PanZoom widget, set the figure\n * interaction back to its previous value.\n */\n const figure = this.get(\"figure\");\n if (figure) {\n figure.set(\"interaction\", this.cached_interaction);\n figure.save_changes();\n const panzoom = this.get(\"_panzoom\");\n // Should reset_scales be part of PanZoomModel.close()?\n panzoom.reset_scales();\n panzoom.close();\n this.set(\"_panzoom\", null);\n this.set(\"_panning\", false);\n this.save_changes();\n }\n }\n save_png() {\n /**\n * Triggers the saving for all the views of that figure.\n */\n // TODO: the toolbar view needs to be associated with a Figure\n // view to avoid calling a model method here.\n const figure = this.get(\"figure\");\n if (figure) {\n figure.save_png();\n }\n }\n _create_panzoom_model(figure) {\n /**\n * Creates a panzoom interaction widget for the specified figure.\n *\n * It will discover the relevant scales for the specified figure.\n */\n return this.widget_manager.new_widget({\n model_name: \"PanZoomModel\",\n model_module: \"bqplot\",\n model_module_version: figure.get(\"_model_module_version\"),\n view_name: \"PanZoom\",\n view_module: \"bqplot\",\n view_module_version: figure.get(\"_view_module_version\")\n }).then(function (model) {\n return Promise.all(figure.get(\"marks\")).then(function (marks) {\n const x_scales = [], y_scales = [];\n for (let i = 0; i < marks.length; ++i) {\n const preserve_domain = marks[i].get(\"preserve_domain\");\n const scales = marks[i].get(\"scales\");\n _.each(scales, function (v, k) {\n const dimension = marks[i].get(\"scales_metadata\")[k][\"dimension\"];\n if (dimension === \"x\" && !preserve_domain[k]) {\n x_scales.push(scales[k]);\n }\n if (dimension === \"y\" && !preserve_domain[k]) {\n y_scales.push(scales[k]);\n }\n });\n }\n model.set(\"scales\", {\n \"x\": x_scales,\n \"y\": y_scales\n });\n model.save_changes();\n return model;\n });\n });\n }\n}\nToolbarModel.serializers = Object.assign({}, widgets.DOMWidgetModel.serializers, { figure: { deserialize: widgets.unpack_models }, _panzoom: { deserialize: widgets.unpack_models } });\nexports.ToolbarModel = ToolbarModel;\n;\nclass Toolbar extends widgets.DOMWidgetView {\n render() {\n this.el.classList.add(\"jupyter-widget\"); // @jupyter-widgets/controls css\n this.el.classList.add(\"widget-hbox\"); // @jupyter-widgets/controls css\n // We use @jupyter-widgets/controls css classes (ipywidget and widget-*-*) to\n // benefit from default width, shadows.\n // We do not use btn-group to not break alignment with jupyter\n // buttons.\n // Create the buttons\n const _panzoom = document.createElement(\"button\");\n _panzoom.classList.add(\"jupyter-widgets\"); // @jupyter-widgets/controls css\n _panzoom.classList.add(\"jupyter-button\"); // @jupyter-widgets/controls css\n _panzoom.classList.add(\"widget-toggle-button\"); // @jupyter-widgets/controls css\n _panzoom.setAttribute(\"data-toggle\", \"tooltip\");\n _panzoom.setAttribute(\"title\", \"PanZoom\");\n _panzoom.onclick = (e) => {\n e.preventDefault();\n this.model.panzoom();\n };\n const panzoomicon = document.createElement(\"i\");\n panzoomicon.className = \"fa fa-arrows\";\n _panzoom.appendChild(panzoomicon);\n const _reset = document.createElement(\"button\");\n _reset.classList.add(\"jupyter-widgets\"); // @jupyter-widgets/controls css\n _reset.classList.add(\"jupyter-button\"); // @jupyter-widgets/controls css\n _reset.classList.add(\"widget-button\"); // @jupyter-widgets/controls css\n _reset.setAttribute(\"data-toggle\", \"tooltip\");\n _reset.setAttribute(\"title\", \"Reset\");\n _reset.onclick = (e) => {\n e.preventDefault();\n this.model.reset();\n };\n const refreshicon = document.createElement(\"i\");\n refreshicon.className = \"fa fa-refresh\";\n _reset.appendChild(refreshicon);\n const _save = document.createElement(\"button\");\n _save.classList.add(\"jupyter-widgets\"); // @jupyter-widgets/controls css\n _save.classList.add(\"jupyter-button\"); // @jupyter-widgets/controls css\n _save.classList.add(\"widget-button\"); // @jupyter-widgets/controls css\n _save.setAttribute(\"data-toggle\", \"tooltip\");\n _save.setAttribute(\"title\", \"Save\");\n _save.onclick = (e) => {\n e.preventDefault();\n this.model.save_png();\n };\n const saveicon = document.createElement(\"i\");\n saveicon.className = \"fa fa-save\";\n _save.appendChild(saveicon);\n this.el.appendChild(_panzoom);\n this.el.appendChild(_reset);\n this.el.appendChild(_save);\n // Handle initial state\n this._panzoom = _panzoom;\n this.update();\n }\n update() {\n if (this.model.get(\"_panning\")) {\n this._panzoom.classList.add(\"mod-active\");\n }\n else {\n this._panzoom.classList.remove(\"mod-active\");\n }\n }\n}\nexports.Toolbar = Toolbar;\n;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbGJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ub29sYmFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCwrREFBaUQ7QUFDakQsdUNBQXlDO0FBQ3pDLDhDQUFnQztBQUVoQyxNQUFhLFlBQWEsU0FBUSxPQUFPLENBQUMsY0FBYztJQUVwRCxRQUFRO1FBQ0oseUJBQVcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ2xELFdBQVcsRUFBRSxjQUFjLEVBQzNCLFVBQVUsRUFBRSxTQUFTLEVBQ3JCLGFBQWEsRUFBRSxRQUFRLEVBQ3ZCLFlBQVksRUFBRSxRQUFRLEVBQ3RCLHFCQUFxQixFQUFFLHNCQUFZLEVBQ25DLG9CQUFvQixFQUFFLHNCQUFZLEVBRWxDLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLFFBQVEsRUFBRSxLQUFLLEVBQ2YsUUFBUSxFQUFFLElBQUksSUFDaEI7SUFDTixDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQix5RUFBeUU7SUFDekUsZ0RBQWdEO0lBQ2hELG1FQUFtRTtJQUNuRSxjQUFjO0lBQ2Qsc0VBQXNFO0lBQ3RFLG1FQUFtRTtJQUNuRSxtRUFBbUU7SUFDbkUsVUFBVTtJQUNWLE9BQU87UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN0QixJQUFJLE1BQU0sRUFBRTtnQkFDUixNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3pCO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxD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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass GraphModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"GraphModel\", _view_name: \"Graph\", x: [], y: [], color: null, hovered_point: null, scales_metadata: {\n x: { orientation: \"horizontal\", dimension: \"x\" },\n y: { orientation: \"vertical\", dimension: \"y\" },\n color: { dimension: \"color\" }\n }, colors: [] });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change([\"x\", \"y\", \"color\", \"link_color\",\n \"node_data\", \"link_data\", \"link_color\",], this.update_data, this);\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.update_data();\n }\n update_node_data() {\n let node_data = this.get(\"node_data\");\n const x = this.get(\"x\");\n const y = this.get(\"y\");\n const color = this.get(\"color\") || [];\n const scales = this.get(\"scales\");\n const color_scale = scales.color;\n function get_shape_attrs(shape, attrs) {\n const new_attrs = {};\n switch (shape) {\n case \"circle\":\n new_attrs.r = attrs.r || 15;\n break;\n case \"rect\":\n new_attrs.width = attrs.width || 25;\n new_attrs.height = attrs.height || new_attrs.width * 0.8;\n new_attrs.rx = attrs.rx || 0;\n new_attrs.ry = attrs.ry || 0;\n break;\n case \"ellipse\":\n new_attrs.rx = attrs.rx || 20;\n new_attrs.ry = attrs.ry || new_attrs.rx * 0.6;\n break;\n default:\n console.log(\"Invalid shape passed - \", shape);\n }\n return new_attrs;\n }\n if (node_data.length > 0 && typeof node_data[0] === \"string\") {\n node_data = node_data.map(function (d) { return { label: d }; });\n }\n this.mark_data = [];\n const that = this;\n //populate mark data from node data with meaningful defaults filled in\n node_data.forEach(function (d, i) {\n d.label = d.label || \"N\" + i;\n d.label_display = d.label_display || \"center\";\n d.shape = d.shape || \"circle\";\n d.shape_attrs = get_shape_attrs(d.shape, d.shape_attrs || {});\n d.value = d.value || null;\n that.mark_data.push(d);\n });\n // also add x, y and color fields\n if (x.length !== 0 && y.length !== 0) {\n if (color_scale) {\n if (!this.get(\"preserve_domain\").color) {\n color_scale.compute_and_set_domain(color, this.model_id + \"_color\");\n }\n else {\n color_scale.del_domain([], this.model_id + \"_color\");\n }\n }\n this.mark_data.forEach(function (d, i) {\n d.xval = x[i];\n d.yval = y[i];\n d.color = color[i];\n });\n }\n }\n update_link_data() {\n const link_color_scale = this.get(\"scales\").link_color;\n this.link_data = this.get(\"link_data\");\n let link_matrix = this.get(\"link_matrix\");\n const link_color = this.get(\"link_color\");\n const that = this;\n if (link_color_scale !== undefined && link_color.length > 0) {\n link_matrix = link_color;\n }\n //coerce link matrix into format understandable by d3 force layout\n if (this.link_data.length === 0 && link_matrix.length > 0) {\n link_matrix.forEach(function (d, i) {\n d.forEach(function (e, j) {\n if (e !== null) {\n that.link_data.push({ source: i, target: j, value: e });\n }\n });\n });\n }\n }\n update_data() {\n this.dirty = true;\n this.update_node_data();\n this.update_link_data();\n this.update_unique_ids();\n this.update_domains();\n this.dirty = false;\n this.trigger(\"data_updated\");\n }\n update_unique_ids() { }\n get_data_dict(data, index) {\n return data;\n }\n update_domains() {\n const data_scale_key_map = { x: 'xval', y: 'yval' };\n if (!this.mark_data) {\n return;\n }\n const scales = this.get(\"scales\");\n for (let key in scales) {\n if (scales.hasOwnProperty(key)) {\n const scale = scales[key];\n if (!this.get(\"preserve_domain\")[key]) {\n scale.compute_and_set_domain(this.mark_data.map(function (d) {\n return d[key] || d[data_scale_key_map[key]];\n }), this.model_id + key);\n }\n else {\n scale.del_domain([], this.model_id + key);\n }\n }\n }\n }\n}\nGraphModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { x: serialize.array_or_json, y: serialize.array_or_json, color: serialize.array_or_json, link_color: serialize.array_or_json, link_matrix: serialize.array_or_json });\nexports.GraphModel = GraphModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9HcmFwaE1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCwyQ0FBd0M7QUFDeEMsdURBQXlDO0FBRXpDLE1BQWEsVUFBVyxTQUFRLHFCQUFTO0lBQ3JDLFFBQVE7UUFDSix5QkFBWSxxQkFBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFDMUMsV0FBVyxFQUFFLFlBQVksRUFDekIsVUFBVSxFQUFFLE9BQU8sRUFFbkIsQ0FBQyxFQUFFLEVBQUUsRUFDTCxDQUFDLEVBQUUsRUFBRSxFQUNMLEtBQUssRUFBRSxJQUFJLEVBQ1gsYUFBYSxFQUFFLElBQUksRUFDbkIsZUFBZSxFQUFFO2dCQUNiLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDaEQsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUM5QyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO2FBQ2hDLEVBQ0QsTUFBTSxFQUFFLEVBQUUsSUFDUjtJQUNOLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFlBQVk7WUFDL0IsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUcsRUFDMUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\nrequire(\"d3-selection-multi\");\n// var d3 =Object.assign({}, require(\"d3-array\"), require(\"d3-drag\"), require(\"d3-force\"), require(\"d3-selection\"));\nconst d3GetEvent = function () { return require(\"d3-selection\").event; }.bind(this);\nconst _ = __importStar(require(\"underscore\"));\nconst Mark_1 = require(\"./Mark\");\nclass Graph extends Mark_1.Mark {\n render() {\n let base_creation_promise = super.render();\n const that = this;\n this.selected_style = this.model.get(\"selected_style\");\n this.unselected_style = this.model.get(\"unselected_style\");\n this.selected_indices = this.model.get(\"selected\");\n this.hovered_style = this.model.get(\"hovered_style\");\n this.unhovered_style = this.model.get(\"unhovered_style\");\n this.hovered_index = !this.model.get(\"hovered_point\") ? null : [this.model.get(\"hovered_point\")];\n this.display_el_classes = [\"element\"];\n this.event_metadata = {\n \"mouse_over\": {\n \"msg_name\": \"hover\",\n \"lookup_data\": false,\n \"hit_test\": true\n },\n \"element_clicked\": {\n \"msg_name\": \"element_click\",\n \"lookup_data\": false,\n \"hit_test\": true\n },\n \"parent_clicked\": {\n \"msg_name\": \"background_click\",\n \"hit_test\": false\n }\n };\n this.displayed.then(function () {\n that.parent.tooltip_div.node().appendChild(that.tooltip_div.node());\n that.create_tooltip();\n });\n this.d3el.attr(\"class\", \"network\");\n this.arrow = this.parent.svg.append(\"defs\")\n .append(\"marker\")\n .attr(\"id\", \"arrow\")\n .attr(\"refX\", 0)\n .attr(\"refY\", 3)\n .attr(\"markerWidth\", 10)\n .attr(\"markerHeight\", 10)\n .attr(\"orient\", \"auto\")\n .append(\"path\")\n .attr(\"class\", \"linkarrow\")\n .attr(\"d\", \"M0,0 L0,6 L9,3 z\");\n return base_creation_promise.then(function () {\n that.event_listeners = {};\n that.process_interactions();\n that.create_listeners();\n that.compute_view_padding();\n that.draw();\n });\n }\n set_ranges() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n if (x_scale) {\n x_scale.set_range(this.parent.padded_range(\"x\", x_scale.model));\n }\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n }\n }\n set_positional_scales() {\n this.x_scale = this.scales.x;\n this.y_scale = this.scales.y;\n // If no scale for \"x\" or \"y\" is specified, figure scales are used.\n if (!this.x_scale) {\n this.x_scale = this.parent.scale_x;\n }\n if (!this.y_scale) {\n this.y_scale = this.parent.scale_y;\n }\n this.listenTo(this.x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.update_position();\n }\n });\n this.listenTo(this.y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.update_position();\n }\n });\n }\n relayout() {\n this.set_ranges();\n this.update_position();\n }\n update_position() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.set_ranges();\n if (x_scale && y_scale) {\n // set x and y positions on mark data manually\n // and redraw the force layout\n this.model.mark_data.forEach(function (d) {\n d.x = x_scale.scale(d.xval) + x_scale.offset;\n d.y = y_scale.scale(d.yval) + y_scale.offset;\n });\n if (this.force_layout) {\n this.force_layout.nodes(this.model.mark_data)\n .force(\"link\", d3.forceLink(this.model.link_data).distance(this.model.get(\"link_distance\")));\n if (this.links) {\n this.links.data(this.model.link_data);\n }\n if (this.nodes) {\n this.nodes.data(this.force_layout.nodes());\n }\n if (this.nodes && this.links) {\n this.tick();\n }\n }\n }\n }\n initialize_additional_scales() {\n const color_scale = this.scales.color;\n if (color_scale) {\n this.listenTo(color_scale, \"domain_changed\", function () {\n this.color_scale_updated();\n });\n color_scale.on(\"color_scale_range_changed\", this.color_scale_updated, this);\n }\n const link_color_scale = this.scales.link_color;\n if (link_color_scale) {\n this.listenTo(link_color_scale, \"domain_changed\", function () {\n this.link_color_scale_updated();\n });\n }\n }\n create_listeners() {\n super.create_listeners();\n this.d3el.on(\"mouseover\", _.bind(function () {\n this.event_dispatcher(\"mouse_over\");\n }, this))\n .on(\"mousemove\", _.bind(function () {\n this.event_dispatcher(\"mouse_move\");\n }, this))\n .on(\"mouseout\", _.bind(function () {\n this.event_dispatcher(\"mouse_out\");\n }, this));\n this.listenTo(this.model, \"change:charge\", this.update_charge);\n this.listenTo(this.model, \"change:link_distance\", this.update_link_distance);\n this.listenTo(this.model, \"data_updated\", this.data_updated);\n this.listenTo(this.model, \"change:tooltip\", this.create_tooltip);\n this.listenTo(this.model, \"change:enable_hover\", function () { this.hide_tooltip(); });\n this.listenTo(this.model, \"change:interactions\", this.process_interactions);\n this.listenTo(this.model, \"change:selected\", this.update_selected);\n this.listenTo(this.model, \"change:hovered_point\", this.update_hovered);\n this.listenTo(this.model, \"change:hovered_style\", this.hovered_style_updated);\n this.listenTo(this.model, \"change:unhovered_style\", this.unhovered_style_updated);\n this.listenTo(this.parent, \"bg_clicked\", function () {\n this.event_dispatcher(\"parent_clicked\");\n });\n }\n data_updated() {\n this.draw();\n this.relayout();\n }\n get_node_color(data, index) {\n const color_scale = this.scales.color;\n const colors = this.model.get(\"colors\");\n const len = colors.length;\n if (color_scale && data.color !== undefined) {\n return color_scale.scale(data.color);\n }\n return colors[index % len];\n }\n draw() {\n this.set_ranges();\n const x_scale = this.scales.x;\n const y_scale = this.scales.y;\n const link_color_scale = this.scales.link_color;\n // clean up the old graph\n this.d3el.selectAll(\".node\").remove();\n this.d3el.selectAll(\".link\").remove();\n if (x_scale && y_scale) {\n //set x and y on mark data manually\n this.model.mark_data.forEach(function (d) {\n d.x = x_scale.scale(d.xval) + x_scale.offset;\n d.y = y_scale.scale(d.yval) + y_scale.offset;\n });\n }\n const box = this.parent.fig.node().getBBox();\n const width = box.width;\n const height = box.height;\n this.force_layout = d3.forceSimulation()\n .force(\"center\", d3.forceCenter(width / 2, height / 2))\n .force(\"forceX\", d3.forceX().strength(0.1).x(width / 2))\n .force(\"forceY\", d3.forceY().strength(0.1).y(height / 2));\n if (!x_scale && !y_scale) {\n this.force_layout\n .force(\"charge\", d3.forceManyBody().strength(this.model.get(\"charge\")))\n .on(\"tick\", _.bind(this.tick, this));\n }\n const directed = this.model.get(\"directed\");\n this.links = this.d3el.selectAll(\".link\")\n .data(this.model.link_data)\n .enter().append(\"path\")\n .attr(\"class\", \"link\")\n .style(\"stroke\", function (d) {\n return link_color_scale ? link_color_scale.scale(d.value) : null;\n })\n .style(\"stroke-width\", function (d) { return d.link_width; })\n .attr(\"marker-mid\", directed ? \"url(#arrow)\" : null);\n this.force_layout.nodes(this.model.mark_data)\n .force(\"link\", d3.forceLink(this.model.link_data).distance(this.model.get(\"link_distance\")));\n const that = this;\n this.nodes = this.d3el.selectAll(\".node\")\n .data(this.force_layout.nodes())\n .enter().append(\"g\")\n .attr(\"class\", \"node\")\n .call(d3.drag()\n .on(\"start\", _.bind(that.dragstarted, that))\n .on(\"drag\", _.bind(that.dragged, that))\n .on(\"end\", _.bind(that.dragended, that)));\n this.nodes\n .append(function (d) {\n return document.createElementNS(d3.namespaces.svg, d.shape);\n })\n .attr(\"class\", \"element\")\n .each(function (d) {\n const node = d3.select(this);\n for (let key in d.shape_attrs) {\n node.attr(key, d.shape_attrs[key]);\n }\n })\n .style(\"fill\", function (d, i) {\n return that.get_node_color(d, i);\n });\n this.nodes.append(\"text\")\n .attr(\"class\", \"label\")\n .attr(\"text-anchor\", function (d) {\n return d.label_display === \"center\" ? \"middle\" : \"start\";\n })\n .attr(\"x\", function (d) {\n let xloc = 0;\n if (d.label_display === \"outside\") {\n switch (d.shape) {\n case \"rect\":\n xloc = d.shape_attrs.width / 2 + 5;\n break;\n case \"circle\":\n xloc = d.shape_attrs.r + 5;\n break;\n case \"ellipse\":\n xloc = d.shape_attrs.rx + 5;\n break;\n default:\n xloc = 0;\n }\n }\n return xloc;\n })\n .attr(\"y\", \".31em\")\n .text(function (d) { return d.label; })\n .style(\"display\", function (d) {\n return d.label_display === \"none\" ? \"none\" : \"inline\";\n });\n this.nodes.on(\"click\", _.bind(function (d, i) {\n this.event_dispatcher(\"element_clicked\", { \"data\": d, \"index\": i });\n }, this));\n this.nodes.on(\"mouseover\", _.bind(function (d, i) {\n this.hover_handler({ \"data\": d, \"index\": i });\n }, this));\n this.nodes.on(\"mouseout\", _.bind(function () {\n this.reset_hover_points();\n }, this));\n }\n dragstarted(d) {\n if (!d3GetEvent().active) {\n this.force_layout.alphaTarget(.4).restart();\n }\n d.fx = d.x;\n d.fy = d.y;\n }\n dragged(d) {\n d.fx = d3GetEvent().x;\n d.fy = d3GetEvent().y;\n }\n dragended(d) {\n if (!d3GetEvent().active) {\n this.force_layout.alphaTarget(.4);\n }\n d.fx = null;\n d.fy = null;\n }\n color_scale_updated() {\n const that = this;\n this.nodes\n .selectAll(\".element\")\n .style(\"fill\", function (d, i) {\n return that.get_node_color(d, i);\n });\n }\n link_color_scale_updated() {\n const link_color_scale = this.scales.link_color;\n this.links.style(\"stroke\", function (d) {\n return link_color_scale ? link_color_scale.scale(d.value) : null;\n });\n }\n process_click(interaction) {\n super.process_click(interaction);\n if (interaction === \"select\") {\n this.event_listeners.parent_clicked = this.reset_selection;\n this.event_listeners.element_clicked = this.click_handler;\n }\n }\n reset_hover_points() {\n this.links.style(\"opacity\", 1);\n this.model.set(\"hovered_point\", null);\n this.hovered_index = null;\n this.touch();\n }\n hover_handler(args) {\n const data = args.data;\n const index = args.index;\n const highlight_links = this.model.get(\"highlight_links\");\n if (highlight_links) {\n this.links.style(\"opacity\", function (d) {\n return d.source.label === data.label ||\n d.target.label === data.label ? 1 : 0.1;\n });\n }\n else {\n this.links.style(\"opacity\", 1);\n }\n this.model.set(\"hovered_point\", index, { updated_view: this });\n this.touch();\n }\n reset_selection() {\n this.model.set(\"selected\", null);\n this.selected_indices = null;\n this.touch();\n }\n click_handler(args) {\n const index = args.index;\n const idx = this.model.get(\"selected\") || [];\n let selected = Array.from(idx);\n const elem_index = selected.indexOf(index);\n // Replacement for \"Accel\" modifier.\n const accelKey = d3GetEvent().ctrlKey || d3GetEvent().metaKey;\n if (elem_index > -1 && accelKey) {\n // if the index is already selected and if accel key is\n // pressed, remove the node from the list\n selected.splice(elem_index, 1);\n }\n else {\n if (accelKey) {\n //If accel is pressed and the bar is not already selcted\n //add the bar to the list of selected bars.\n selected.push(index);\n }\n // updating the array containing the bar indexes selected\n // and updating the style\n else {\n //if accel is not pressed, then clear the selected ones\n //and set the current node to the selected\n selected = [];\n selected.push(index);\n }\n }\n this.model.set(\"selected\", ((selected.length === 0) ? null : selected), { updated_view: this });\n this.touch();\n let e = d3GetEvent();\n if (!e) {\n e = window.event;\n }\n if (e.cancelBubble !== undefined) { // IE\n e.cancelBubble = true;\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n e.preventDefault();\n }\n hovered_style_updated(model, style) {\n this.hovered_style = style;\n this.clear_style(model.previous(\"hovered_style\"), this.hovered_index);\n this.style_updated(style, this.hovered_index);\n }\n unhovered_style_updated(model, style) {\n this.unhovered_style = style;\n const hov_indices = this.hovered_index;\n const unhovered_indices = (hov_indices) ?\n _.range(this.model.mark_data.length).filter(function (index) {\n return hov_indices.indexOf(index) === -1;\n }) : [];\n this.clear_style(model.previous(\"unhovered_style\"), unhovered_indices);\n this.style_updated(style, unhovered_indices);\n }\n update_selected(model, value) {\n this.selected_indices = value;\n this.apply_styles();\n }\n update_hovered(model, value) {\n this.hovered_index = value === null ? value : [value];\n this.apply_styles();\n }\n apply_styles(style_arr) {\n if (style_arr === undefined || style_arr === null) {\n style_arr = [this.selected_style, this.unselected_style,\n this.hovered_style, this.unhovered_style];\n }\n super.apply_styles(style_arr);\n const all_indices = _.range(this.model.mark_data.length);\n this.set_style_on_elements(this.hovered_style, this.hovered_index);\n const unhovered_indices = (!this.hovered_index) ?\n [] : _.difference(all_indices, this.hovered_index);\n this.set_style_on_elements(this.unhovered_style, unhovered_indices);\n }\n clear_style(style_dict, indices) {\n let nodes = this.d3el.selectAll(\".element\");\n if (indices) {\n nodes = nodes.filter(function (d, index) {\n return indices.indexOf(index) !== -1;\n });\n }\n const clearing_style = {};\n for (let key in style_dict) {\n clearing_style[key] = null;\n }\n nodes.styles(clearing_style);\n }\n set_style_on_elements(style, indices) {\n // If the index array is undefined or of length=0, exit the\n // function without doing anything\n if (!indices || indices.length === 0) {\n return;\n }\n // Also, return if the style object itself is blank\n if (style !== undefined && Object.keys(style).length === 0) {\n return;\n }\n let nodes = this.d3el.selectAll(\".element\");\n nodes = nodes.filter(function (data, index) {\n return indices.indexOf(index) !== -1;\n });\n nodes.styles(style);\n }\n compute_view_padding() {\n const x_padding = d3.max(this.model.mark_data.map(function (d) {\n return (d.shape_attrs.r ||\n d.shape_attrs.width / 2 ||\n d.shape_attrs.rx) + 1.0;\n }));\n const y_padding = d3.max(this.model.mark_data.map(function (d) {\n return (d.shape_attrs.r ||\n d.shape_attrs.height / 2 ||\n d.shape_attrs.ry) + 1.0;\n }));\n if (x_padding !== this.x_padding || y_padding !== this.y_padding) {\n this.x_padding = x_padding;\n this.y_padding = x_padding;\n this.trigger(\"mark_padding_updated\");\n }\n }\n selected_deleter() {\n d3GetEvent().stopPropagation();\n return;\n }\n update_link_distance() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n const link_dist = this.model.get(\"link_distance\");\n if (!x_scale && !y_scale) {\n this.force_layout.linkDistance(link_dist).start();\n }\n }\n update_charge() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n const charge = this.model.get(\"charge\");\n if (!x_scale && !y_scale) {\n this.force_layout.charge(charge).start();\n }\n }\n link_arc(d) {\n const dx = d.target.x - d.source.x, dy = d.target.y - d.source.y, dr = Math.sqrt(dx * dx + dy * dy);\n return \"M\" + d.source.x + \",\" + d.source.y + \"A\" + dr + \",\" + dr +\n \" 0 0,1 \" + d.target.x + \",\" + d.target.y;\n }\n link_line(d) {\n const midx = (d.source.x + d.target.x) / 2, midy = (d.source.y + d.target.y) / 2;\n return \"M\" + d.source.x + \",\" + d.source.y + \"L\" + midx + \",\" +\n midy + \"L\" + d.target.x + \",\" + d.target.y;\n }\n link_slant_line(d) {\n const midx = (d.source.x + d.target.x) / 2;\n return \"M\" + d.source.x + \",\" + d.source.y +\n \"L\" + midx + \",\" + d.target.y +\n \"L\" + d.target.x + \",\" + d.target.y;\n }\n tick() {\n const link_type = this.model.get(\"link_type\");\n this.nodes.attr(\"transform\", transform);\n // move rects to center since x, y of rect is at the corner\n this.nodes.select(\"rect\")\n .attr(\"transform\", function (d) {\n return \"translate(\" +\n (-d.shape_attrs.width / 2) + \",\" +\n (-d.shape_attrs.height / 2) + \")\";\n });\n let link_path_func = this.link_arc;\n switch (link_type) {\n case 'arc':\n link_path_func = this.link_arc;\n break;\n case 'line':\n link_path_func = this.link_line;\n break;\n case 'slant_line':\n link_path_func = this.link_slant_line;\n break;\n default:\n link_path_func = this.link_arc;\n }\n this.links.attr(\"d\", function (d) { return link_path_func(d); });\n function transform(d) {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }\n }\n set_default_style(indices) {\n }\n}\nexports.Graph = Graph;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6Qiw4QkFBNEI7QUFDNUIsb0hBQW9IO0FBQ3BILE1BQU0sVUFBVSxHQUFHLGNBQVcsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSw4Q0FBZ0M7QUFDaEMsaUNBQThCO0FBRzlCLE1BQWEsS0FBTSxTQUFRLFdBQUk7SUFDM0IsTUFBTTtRQUNGLElBQUkscUJBQXFCLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRTNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FB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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst d3 = __importStar(require(\"d3\"));\n// var d3 =Object.assign({}, require(\"d3\"));\nconst Mark_1 = require(\"./Mark\");\nconst _ = __importStar(require(\"underscore\"));\nclass Image extends Mark_1.Mark {\n render() {\n const base_render_promise = super.render();\n const el = this.d3el || this.el;\n this.im = el.append(\"image\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", 1)\n .attr(\"height\", 1)\n .attr(\"preserveAspectRatio\", \"none\");\n this.update_image();\n this.event_metadata = {\n \"mouse_over\": {\n \"msg_name\": \"hover\",\n \"lookup_data\": false,\n \"hit_test\": true\n },\n \"legend_clicked\": {\n \"msg_name\": \"legend_click\",\n \"hit_test\": true\n },\n \"element_clicked\": {\n \"msg_name\": \"element_click\",\n \"lookup_data\": false,\n \"hit_test\": false\n },\n \"parent_clicked\": {\n \"msg_name\": \"background_click\",\n \"hit_test\": false\n }\n };\n const that = this;\n return base_render_promise.then(function () {\n that.event_listeners = {};\n that.reset_click();\n that.create_listeners();\n that.listenTo(that.parent, \"margin_updated\", function () {\n that.draw(false);\n });\n });\n }\n set_positional_scales() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n this.listenTo(x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n this.listenTo(y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n this.draw();\n }\n });\n }\n set_ranges() {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n if (x_scale) {\n x_scale.set_range(this.parent.padded_range(\"x\", x_scale.model));\n }\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n }\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:image\", this.update_image);\n this.listenTo(this.model, \"data_updated\", function () {\n //animate on data update\n const animate = true;\n this.draw(animate);\n });\n }\n update_image() {\n if (this.im.attr(\"href\")) {\n URL.revokeObjectURL(this.im.attr(\"href\"));\n }\n const image = this.model.get(\"image\");\n const blob = new Blob([image.get(\"value\")], { type: \"image/\" + image.get(\"format\") });\n const url = URL.createObjectURL(blob);\n this.im.attr(\"href\", url);\n }\n remove() {\n URL.revokeObjectURL(this.im.attr(\"href\"));\n super.remove();\n }\n relayout() {\n this.draw(true);\n }\n img_send_message(event_name, data) {\n // For the moment, use a custom function instead of overriding the\n // event_dispatcher from Mark.js. The data you want from an image\n // click is very different than other marks. We are not trying to\n // to find out which image was clicked in the way that Scatter\n // or Lines returns returns the position of the dot or line on\n // (or near) which the user clicked.\n //\n // Here we want to return the location of the mouse click.\n const event_data = this.event_metadata[event_name];\n const data_message = {\n \"click_x\": this.scales.x.invert(d3.mouse(this.el)[0]),\n \"click_y\": this.scales.y.invert(d3.mouse(this.el)[1])\n };\n // how to get access to raw event: data.data.clientY};\n // for (var datum in data.data) {\n // data_message[datum] = data.data[datum];\n // }\n ;\n this.send({ event: event_data.msg_name, data: data_message });\n }\n draw(animate) {\n this.set_ranges();\n const x_scale = this.scales.x ? this.scales.x : this.parent.scale_x;\n const y_scale = this.scales.y ? this.scales.y : this.parent.scale_y;\n const animation_duration = animate ? this.parent.model.get(\"animation_duration\") : 0;\n const el = this.d3el || this.el;\n const x_scaled = this.model.mark_data[\"x\"].map(x_scale.scale), y_scaled = this.model.mark_data[\"y\"].map(y_scale.scale);\n el.selectAll(\"image\").transition()\n .duration(animation_duration)\n .attr(\"transform\", function (d) {\n const tx = x_scaled[0] + x_scale.offset;\n const ty = y_scaled[1] + y_scale.offset;\n const sx = x_scaled[1] - x_scaled[0];\n const sy = y_scaled[0] - y_scaled[1];\n return \"translate(\" + tx + \",\" + ty + \") scale(\" + sx + \", \" + sy + \")\";\n });\n el.on(\"click\", _.bind(function (d, i) {\n this.img_send_message(\"element_clicked\", { \"data\": d3.event, \"index\": i });\n }, this));\n }\n clear_style(style_dict, indices, elements) {\n }\n compute_view_padding() {\n }\n set_default_style(indices, elements) {\n }\n set_style_on_elements(style, indices, elements) {\n }\n}\nexports.Image = Image;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvSW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6Qiw0Q0FBNEM7QUFDNUMsaUNBQTZCO0FBQzdCLDhDQUFnQztBQUdoQyxNQUFhLEtBQU0sU0FBUSxXQUFJO0lBRTNCLE1BQU07UUFDRixNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUN2QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUNaLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ1osSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDakIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ2xCLFlBQVksRUFBRTtnQkFDVixVQUFVLEVBQUUsT0FBTztnQkFDbkIsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLFVBQVUsRUFBRSxJQUFJO2FBQ25CO1lBQ0QsZ0JBQWdCLEVBQUc7Z0JBQ2YsVUFBVSxFQUFFLGNBQWM7Z0JBQzFCLFVBQVUsRUFBRSxJQUFJO2FBQ25CO1lBQ0QsaUJBQWlCLEVBQUU7Z0JBQ2YsVUFBVSxFQUFFLGVBQWU7Z0JBQzNCLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixVQUFVLEVBQUUsS0FBSzthQUNwQjtZQUNELGdCQUFnQixFQUFFO2dCQUNkLFVBQVUsRUFBRSxr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","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst widgets = __importStar(require(\"@jupyter-widgets/base\"));\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass ImageModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"ImageModel\", _view_name: \"Image\", x: [0.0, 1.0], y: [0.0, 1.0], scales_metadata: {\n 'x': { 'orientation': 'horizontal', 'dimension': 'x' },\n 'y': { 'orientation': 'vertical', 'dimension': 'y' },\n } });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.on_some_change(['x', 'y'], this.update_data, this);\n this.on_some_change([\"preserve_domain\"], this.update_domains, this);\n this.update_data();\n }\n update_data() {\n this.mark_data = {\n x: this.get(\"x\"), y: this.get(\"y\")\n };\n this.update_domains();\n this.trigger(\"data_updated\");\n }\n update_domains() {\n if (!this.mark_data) {\n return;\n }\n const scales = this.get(\"scales\");\n const x_scale = scales.x;\n const y_scale = scales.y;\n if (x_scale) {\n if (!this.get(\"preserve_domain\").x) {\n x_scale.compute_and_set_domain(this.mark_data['x'], this.model_id + \"_x\");\n }\n else {\n x_scale.del_domain([], this.model_id + \"_x\");\n }\n }\n if (y_scale) {\n if (!this.get(\"preserve_domain\").y) {\n y_scale.compute_and_set_domain(this.mark_data['y'], this.model_id + \"_y\");\n }\n else {\n y_scale.del_domain([], this.model_id + \"_y\");\n }\n }\n }\n}\nImageModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { image: { deserialize: widgets.unpack_models }, x: serialize.array_or_json, y: serialize.array_or_json });\nexports.ImageModel = ImageModel;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZ2VNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9JbWFnZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7Ozs7Ozs7QUFFSCwrREFBaUQ7QUFDakQsMkNBQXdDO0FBQ3hDLHVEQUF5QztBQUV6QyxNQUFhLFVBQVcsU0FBUSxxQkFBUztJQUVyQyxRQUFRO1FBQ0oseUJBQVcscUJBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQ3JDLFdBQVcsRUFBRSxZQUFZLEVBQ3pCLFVBQVUsRUFBRSxPQUFPLEVBQ25CLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFDYixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ2IsZUFBZSxFQUFFO2dCQUNiLEdBQUcsRUFBRSxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBQztnQkFDcEQsR0FBRyxFQUFFLEVBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFDO2FBQ3JELElBQ0g7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPO1FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDYixDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7U0FDckMsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsT0FBTztTQUNWO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFekIsSUFBRyxPQUFPLEVBQUU7WUFDUixJQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDL0IsT0FBTyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUM3RTtpQkFBTTtnQkFDSCxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQ2hEO1NBQ0o7UUFDRCxJQUFHLE9BQU8sRUFBRTtZQUNSLElBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQzdFO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDaEQ7U0FDSjtJQUNMLENBQUM7O0FBRU0sc0JBQVcscUJBQ1gscUJBQVMsQ0FBQyxXQUFXLElBQ3hCLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQzdDLENBQUMsRUFBRSxTQUFTLENBQUMsYUFBYSxFQUMxQixDQUFDLEVBQUUsU0FBUyxDQUFDLGFBQWEsSUFDNUI7QUEzRE4sZ0NBNERDIn0=","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst Mark_1 = require(\"./Mark\");\nconst d3 = __importStar(require(\"d3\"));\nconst markers = __importStar(require(\"./Markers\"));\nconst _ = __importStar(require(\"underscore\"));\nconst utils_1 = require(\"./utils\");\nconst THREE = __importStar(require(\"three\"));\nconst bqSymbol = markers.symbol;\nconst to_float_array = function (value) {\n if (value instanceof Float32Array)\n return value;\n if (typeof value[Symbol.iterator] === 'function') {\n const N = value.length;\n let array32 = new Float32Array(N);\n for (let i = 0; i < N; i++) {\n array32[i] = value[i];\n }\n return array32;\n }\n return new Float32Array(value);\n};\nconst color_to_array_rgba = function (color, default_color) {\n const color_name = color || default_color || [0., 0., 0., 0.];\n if (color_name == 'none') {\n return [0., 0., 0., 0.];\n }\n else {\n const color = new THREE.Color(color_name);\n return [color.r, color.g, color.b, 1.0];\n }\n};\nconst create_colormap = function (scale) {\n // convert the d3 color scale to a texture\n const colors = scale ? scale.model.color_range : ['#ff0000', '#ff0000'];\n const color_scale = d3.scaleLinear()\n .range(colors)\n .domain(_.range(colors.length).map((i) => i / (colors.length - 1)));\n const colormap_array = [];\n const N = 256;\n _.map(_.range(N), (i) => {\n const index = i / (N - 1);\n const rgb = d3.color(String(color_scale(index))).hex();\n const rgb_str = String(rgb);\n const rgb_arr = [parseInt(\"0x\" + rgb_str.substring(1, 3)),\n parseInt(\"0x\" + rgb_str.substring(3, 5)),\n parseInt(\"0x\" + rgb_str.substring(5, 7))];\n colormap_array.push(rgb_arr[0], rgb_arr[1], rgb_arr[2]);\n });\n const colormap_arr = new Uint8Array(colormap_array);\n const colormap_texture = new THREE.DataTexture(colormap_arr, N, 1, THREE.RGBFormat, THREE.UnsignedByteType);\n colormap_texture.needsUpdate = true;\n return colormap_texture;\n};\nclass AttributeParameters {\n constructor(array, item_size = 1, mesh_per_attribute = 1, normalized = false) {\n this.array = array;\n this.item_size = item_size;\n this.mesh_per_attribute = mesh_per_attribute;\n this.normalized = normalized;\n }\n}\n;\nclass ColorAttributeParameters extends AttributeParameters {\n constructor(array, item_size = 1, mesh_per_attribute = 1, normalized = false, use_colormap = true) {\n super(array, item_size, mesh_per_attribute, normalized);\n this.use_colormap = use_colormap;\n }\n}\n;\nclass SelectionAttributeParameters extends AttributeParameters {\n constructor(array, item_size = 1, mesh_per_attribute = 1, normalized = false, use_selection = true) {\n super(array, item_size, mesh_per_attribute, normalized);\n this.use_selection = use_selection;\n }\n}\n;\nclass ScatterGL extends Mark_1.Mark {\n render() {\n const base_render_promise = super.render();\n this.transitions = [];\n this.invalidated_pixel_position = true;\n // only used for the legend\n this.dot = bqSymbol()\n .type(this.model.get(\"marker\"));\n // Create square geometry (two triangles) for markers\n this.instanced_geometry = new THREE.InstancedBufferGeometry();\n const vertices = new Float32Array([\n -0.5, 0.5, 0.,\n 0.5, 0.5, 0.,\n -0.5, -0.5, 0.,\n 0.5, -0.5, 0.\n ]);\n this.instanced_geometry.addAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));\n const uv = new Float32Array([0., 1., 1., 1., 0., 0., 1., 0.]);\n this.instanced_geometry.addAttribute('uv', new THREE.Float32BufferAttribute(uv, 2));\n const indices = new Uint16Array([0, 2, 1, 2, 3, 1]);\n this.instanced_geometry.index = new THREE.Uint16BufferAttribute(indices, 1);\n // Create material for markers\n this.scatter_material = new THREE.RawShaderMaterial({\n uniforms: {\n domain_x: { type: \"2f\", value: [0., 10.] },\n domain_y: { type: \"2f\", value: [-12., 12.] },\n domain_z: { type: \"2f\", value: [0., 1.] },\n domain_size: { type: \"2f\", value: [0., 1.] },\n domain_color: { type: \"2f\", value: [0., 1.] },\n domain_rotation: { type: \"2f\", value: [0., 180] },\n domain_opacity: { type: \"2f\", value: [0., 1.] },\n range_x: { type: \"2f\", value: [0., 1.] },\n range_y: { type: \"2f\", value: [0., 1.] },\n range_z: { type: \"2f\", value: [0., 1.] },\n range_size: { type: \"2f\", value: [0., 1.] },\n range_rotation: { type: \"2f\", value: [0., Math.PI] },\n range_opacity: { type: \"2f\", value: [0., 1.] },\n animation_time_x: { type: \"f\", value: 1. },\n animation_time_y: { type: \"f\", value: 1. },\n animation_time_z: { type: \"f\", value: 1. },\n animation_time_size: { type: \"f\", value: 1. },\n animation_time_color: { type: \"f\", value: 1. },\n animation_time_rotation: { type: \"f\", value: 1. },\n animation_time_opacity: { type: \"f\", value: 1. },\n has_selection: { type: \"b\", value: false },\n has_hover: { type: \"b\", value: false },\n has_selected_fill: { type: \"b\", value: false },\n has_selected_stroke: { type: \"b\", value: false },\n has_selected_opacity: { type: \"b\", value: false },\n has_unselected_fill: { type: \"b\", value: false },\n has_unselected_stroke: { type: \"b\", value: false },\n has_unselected_opacity: { type: \"b\", value: false },\n has_hovered_fill: { type: \"b\", value: false },\n has_hovered_stroke: { type: \"b\", value: false },\n has_hovered_opacity: { type: \"b\", value: false },\n has_unhovered_fill: { type: \"b\", value: false },\n has_unhovered_stroke: { type: \"b\", value: false },\n has_unhovered_opacity: { type: \"b\", value: false },\n selected_fill: { type: \"4f\", value: [1., 0., 0., 1.0] },\n selected_stroke: { type: \"4f\", value: [1., 0., 0., 1.0] },\n selected_opacity: { value: 1.0 },\n unselected_fill: { type: \"4f\", value: [1., 0., 0., 1.0] },\n unselected_stroke: { type: \"4f\", value: [1., 0., 0., 1.0] },\n unselected_opacity: { value: 1.0 },\n hovered_fill: { type: \"4f\", value: [0., 1., 0., 1.0] },\n hovered_opacity: { value: 1.0 },\n hovered_stroke: { type: \"4f\", value: [0., 1., 0., 1.0] },\n unhovered_fill: { type: \"4f\", value: [0., 1., 0., 1.0] },\n unhovered_stroke: { type: \"4f\", value: [0., 1., 0., 1.0] },\n unhovered_opacity: { value: 1.0 },\n default_stroke_color: { type: \"4f\", value: [0, 0, 0, 0] },\n colormap: { type: 't', value: null },\n fill: { type: 'b', value: true },\n stroke_width: { type: 'f', value: 1.5 },\n marker_scale: { type: 'f', value: 1.0 }\n },\n vertexShader: require('raw-loader!../shaders/scatter-vertex.glsl').default,\n fragmentShader: require('raw-loader!../shaders/scatter-fragment.glsl').default,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n // background reading for blending:\n // https://limnu.com/webgl-blending-youre-probably-wrong/\n blending: THREE.CustomBlending,\n blendEquation: THREE.AddEquation,\n blendSrc: THREE.OneFactor,\n blendDst: THREE.OneMinusSrcAlphaFactor,\n blendEquationAlpha: THREE.AddEquation,\n blendSrcAlpha: THREE.OneFactor,\n blendDstAlpha: THREE.OneMinusSrcAlphaFactor,\n });\n // Create mesh\n this.mesh = new THREE.Mesh(this.instanced_geometry, this.scatter_material);\n return base_render_promise.then(() => {\n this.camera = new THREE.OrthographicCamera(-1 / 2, 1 / 2, 1 / 2, -1 / 2, -10000, 10000);\n this.camera.position.z = 10;\n this.scene = new THREE.Scene();\n const x_parameters = new AttributeParameters(to_float_array(this.model.get('x')));\n this.x = this.initialize_attribute('x', x_parameters);\n this.x_previous = this.initialize_attribute('x_previous', x_parameters);\n const y_parameters = new AttributeParameters(to_float_array(this.model.get('y')));\n this.y = this.initialize_attribute('y', y_parameters);\n this.y_previous = this.initialize_attribute('y_previous', y_parameters);\n this.markers_number = Math.min(this.x.array.length, this.y.array.length);\n this.instanced_geometry.maxInstancedCount = this.markers_number;\n const color_parameters = this.get_color_attribute_parameters();\n this.color = this.initialize_attribute('color', color_parameters);\n this.scatter_material.defines['USE_COLORMAP'] = color_parameters.use_colormap;\n const opacity_parameters = this.get_opacity_attribute_parameters();\n this.opacity = this.initialize_attribute('opacity', opacity_parameters);\n this.opacity_previous = this.initialize_attribute('opacity_previous', opacity_parameters);\n const size_parameters = this.get_size_attribute_parameters();\n this.size = this.initialize_attribute('size', size_parameters);\n this.size_previous = this.initialize_attribute('size_previous', size_parameters);\n const rotation_parameters = this.get_rotation_attribute_parameters();\n this.rotation = this.initialize_attribute('rotation', rotation_parameters);\n this.rotation_previous = this.initialize_attribute('rotation_previous', rotation_parameters);\n const selected_parameters = this.get_selected_attribute_parameters();\n this.selected = this.initialize_attribute('selected', selected_parameters);\n this.scatter_material.uniforms['has_selection'].value = selected_parameters.use_selection;\n this.scatter_material.needsUpdate = true;\n this.scene.add(this.mesh);\n this.create_listeners();\n this.compute_view_padding();\n this.update_scene();\n this.listenTo(this.parent, \"margin_updated\", () => {\n this.update_scene();\n });\n });\n return base_render_promise;\n }\n initialize_attribute(name, parameters) {\n const attribute = new THREE.InstancedBufferAttribute(parameters.array, parameters.item_size, parameters.mesh_per_attribute);\n attribute.normalized = parameters.normalized;\n attribute.dynamic = true;\n this.instanced_geometry.addAttribute(name, attribute);\n return attribute;\n }\n get_color_attribute_parameters() {\n if (this.model.get('color')) {\n const color = this.model.get('color');\n // TODO Use `default_color`?\n let array;\n if (color.length < this.markers_number) {\n array = to_float_array(this.markers_number);\n array.set(color);\n }\n else {\n array = to_float_array(color);\n }\n return new ColorAttributeParameters(array, 1, 1, true, true);\n }\n else {\n let colors = this.model.get('colors');\n if (!colors) {\n const color = (this.model.get('unselected_style') || {})['fill'] || 'orange';\n colors = [color];\n }\n let array;\n let mesh_per_attribute;\n if (colors.length == 1) {\n const color = new THREE.Color(colors[0]);\n array = to_float_array([color.r, color.g, color.b]);\n mesh_per_attribute = this.markers_number;\n }\n else {\n array = to_float_array(this.markers_number * 3);\n _.each(_.range(this.markers_number), (i) => {\n const color = new THREE.Color(colors[i % colors.length]);\n array[i * 3 + 0] = color.r;\n array[i * 3 + 1] = color.g;\n array[i * 3 + 2] = color.b;\n });\n mesh_per_attribute = 1;\n }\n return new ColorAttributeParameters(array, 3, mesh_per_attribute, false, false);\n }\n }\n get_opacity_attribute_parameters() {\n let default_opacities = this.model.get('default_opacities') || [1.];\n if (default_opacities.length == 0)\n default_opacities = [1.];\n if (this.model.get('opacity')) {\n const opacity = this.model.get('opacity');\n let array;\n if (opacity.length < this.markers_number) {\n array = to_float_array(this.markers_number);\n array.set(opacity);\n _.each(_.range(this.markers_number - opacity.length), (i) => {\n i = i + opacity.length;\n array[i] = default_opacities[i % default_opacities.length];\n });\n }\n else {\n array = to_float_array(opacity);\n }\n return new AttributeParameters(array, 1, 1);\n }\n else {\n let array;\n let mesh_per_attribute;\n if (default_opacities.length == 1) {\n array = to_float_array(default_opacities);\n mesh_per_attribute = this.markers_number;\n }\n else {\n array = to_float_array(this.markers_number);\n mesh_per_attribute = 1;\n _.each(_.range(this.markers_number), (i) => {\n array[i] = default_opacities[i % default_opacities.length];\n });\n }\n return new AttributeParameters(array, 1, mesh_per_attribute);\n }\n }\n get_size_attribute_parameters() {\n if (this.model.get('size')) {\n // One size per marker\n const size = this.model.get('size');\n let array;\n if (size.length < this.markers_number) {\n array = to_float_array(this.markers_number);\n array.fill(this.model.get('default_size'));\n array.set(size);\n }\n else {\n array = to_float_array(size);\n }\n return new AttributeParameters(array, 1, 1);\n }\n else {\n // Same size for all the markers\n return new AttributeParameters(to_float_array([this.model.get('default_size')]), 1, this.markers_number);\n }\n }\n get_rotation_attribute_parameters() {\n if (this.model.get('rotation')) {\n const rotation = this.model.get('rotation');\n let array;\n if (rotation.length < this.markers_number) {\n array = to_float_array(this.markers_number);\n array.set(rotation);\n }\n else {\n array = to_float_array(rotation);\n }\n return new AttributeParameters(array, 1, 1);\n }\n else {\n return new AttributeParameters(to_float_array(1), 1, this.markers_number);\n }\n }\n get_selected_attribute_parameters() {\n if (this.model.get('selected')) {\n const selected = this.model.get('selected');\n const array = to_float_array(this.markers_number);\n for (let i = 0; i < selected.length; i++) {\n if (selected[i] < array.length) {\n array[selected[i]] = 1;\n }\n }\n return new SelectionAttributeParameters(array, 1, 1, false, true);\n }\n else {\n return new SelectionAttributeParameters(to_float_array(1), 1, this.markers_number, false, false);\n }\n }\n update_scene() {\n this.parent.update_gl();\n }\n render_gl() {\n this.set_ranges();\n const fig = this.parent;\n const x_scale = this.scales.x ? this.scales.x : this.parent.scale_x;\n const y_scale = this.scales.y ? this.scales.y : this.parent.scale_y;\n const range_x = this.parent.padded_range(\"x\", x_scale.model);\n const range_y = this.parent.padded_range(\"y\", y_scale.model);\n _.each(['selected', 'hovered'], (style_type) => {\n _.each(['stroke', 'fill', 'opacity'], (style_property) => {\n this.scatter_material.uniforms[`has_${style_type}_${style_property}`].value = Boolean(this.model.get(`${style_type}_style`)[style_property]);\n this.scatter_material.uniforms[`has_un${style_type}_${style_property}`].value = Boolean(this.model.get(`un${style_type}_style`)[style_property]);\n if (_.contains(['opacity'], style_property)) {\n this.scatter_material.uniforms[`${style_type}_${style_property}`].value = this.model.get(`${style_type}_style`)[style_property];\n this.scatter_material.uniforms[`un${style_type}_${style_property}`].value = this.model.get(`un${style_type}_style`)[style_property];\n }\n else {\n this.scatter_material.uniforms[`${style_type}_${style_property}`].value = color_to_array_rgba(this.model.get(`${style_type}_style`)[style_property], 'green');\n this.scatter_material.uniforms[`un${style_type}_${style_property}`].value = color_to_array_rgba(this.model.get(`un${style_type}_style`)[style_property], 'green');\n }\n });\n });\n this.camera.left = 0;\n this.camera.right = fig.plotarea_width;\n this.camera.bottom = 0;\n this.camera.top = fig.plotarea_height;\n this.camera.updateProjectionMatrix();\n this.scatter_material.uniforms['range_x'].value = range_x;\n this.scatter_material.uniforms['range_y'].value = [range_y[1], range_y[0]]; // flipped coordinates in WebGL\n this.scatter_material.uniforms['domain_x'].value = x_scale.scale.domain();\n this.scatter_material.uniforms['domain_y'].value = y_scale.scale.domain();\n if (this.scales.size) {\n this.scatter_material.uniforms['range_size'].value = this.scales.size.scale.range();\n this.scatter_material.uniforms['domain_size'].value = this.scales.size.scale.domain();\n }\n else {\n const size = this.model.get('default_size');\n this.scatter_material.uniforms['range_size'].value = [0, size];\n this.scatter_material.uniforms['domain_size'].value = [0, size];\n }\n if (this.scales.rotation) {\n this.scatter_material.uniforms['range_rotation'].value = this.scales.rotation.scale.range();\n this.scatter_material.uniforms['domain_rotation'].value = this.scales.rotation.scale.domain();\n }\n if (this.scales.opacity) {\n this.scatter_material.uniforms['range_opacity'].value = this.scales.opacity.scale.range();\n this.scatter_material.uniforms['domain_opacity'].value = this.scales.opacity.scale.domain();\n }\n const renderer = fig.renderer;\n renderer.render(this.scene, this.camera);\n const transitions_todo = [];\n for (let i = 0; i < this.transitions.length; i++) {\n const t = this.transitions[i];\n if (!t.is_done())\n transitions_todo.push(t);\n t.update();\n }\n this.transitions = transitions_todo;\n if (this.transitions.length > 0) {\n this.update_scene();\n }\n }\n create_listeners() {\n super.create_listeners();\n this.listenTo(this.model, \"change:x\", this.update_x);\n this.listenTo(this.model, \"change:y\", this.update_y);\n this.listenTo(this.model, \"change:color change:colors change:unselected_style\", this.update_color);\n this.listenTo(this.model, \"change:opacity change:default_opacities\", this.update_opacity);\n this.listenTo(this.model, \"change:size change:default_size\", this.update_size);\n this.listenTo(this.model, \"change:rotation\", this.update_rotation);\n this.listenTo(this.model, \"change:selected\", this.update_selected);\n this.listenTo(this.model, 'change:marker', this.update_marker);\n this.update_marker();\n this.listenTo(this.model, 'change:stroke', this.update_stroke);\n this.update_stroke();\n this.listenTo(this.model, 'change:stroke_width', this.update_stroke_width);\n this.update_stroke_width();\n const sync_visible = () => {\n this.mesh.visible = this.model.get('visible');\n this.update_scene();\n };\n this.listenTo(this.model, \"change:visible\", sync_visible);\n sync_visible();\n const sync_fill = () => {\n this.scatter_material.defines['FILL'] = this.model.get('fill') ? 1 : 0;\n this.scatter_material.needsUpdate = true;\n this.update_scene();\n };\n this.listenTo(this.model, \"change:fill\", sync_fill);\n sync_fill();\n this.listenTo(this.model, \"change\", this.update_legend);\n }\n update_attribute(name, value, new_parameters) {\n // Workaround, updating `meshPerAttribute` does not work in ThreeJS and can result in a buffer overflow\n // so we need to re-initialize the attribute. Same for an array size increase.\n if (value.meshPerAttribute != new_parameters.mesh_per_attribute) {\n value = this.initialize_attribute(name, new_parameters);\n }\n else if (value.array.length < new_parameters.array.length) {\n value = this.initialize_attribute(name, new_parameters);\n }\n else {\n value.itemSize = new_parameters.item_size;\n value.setArray(new_parameters.array);\n }\n value.needsUpdate = true;\n return value;\n }\n update_attributes(name, value, value_previous, new_parameters, animate = true, after_animation = () => { }) {\n if (animate) {\n // `value_previous.array` must have at least the same length as `value.array` in order for animation to work\n if (value.array.length < new_parameters.array.length && value.meshPerAttribute == new_parameters.mesh_per_attribute) {\n const array = utils_1.deepCopy(new_parameters.array);\n // array.fill(default_value);\n array.set(value.array);\n value_previous = this.update_attribute(name + '_previous', value_previous, new AttributeParameters(array, value.itemSize, value.meshPerAttribute, value.normalized));\n }\n // meshPerAttribute changed but not the array size, it is very likely that the number of markers has changed, value_previous must\n // have the right meshPerAttribute\n else if (value.array.length == new_parameters.array.length && value.meshPerAttribute != new_parameters.mesh_per_attribute) {\n value_previous = this.update_attribute(name + '_previous', value_previous, new AttributeParameters(value.array, value.itemSize, new_parameters.mesh_per_attribute, value.normalized));\n }\n else {\n value_previous = this.update_attribute(name + '_previous', value_previous, new AttributeParameters(value.array, value.itemSize, value.meshPerAttribute, value.normalized));\n }\n value = this.update_attribute(name, value, new_parameters);\n this.animate_attribute(name, after_animation);\n }\n else {\n value_previous = this.update_attribute(name + '_previous', value_previous, new_parameters);\n value = this.update_attribute(name, value, new_parameters);\n }\n return [value, value_previous];\n }\n animate_attribute(name, after_animation = () => { }) {\n this.scatter_material.uniforms['animation_time_' + name]['value'] = 0;\n const set = (value) => {\n this.scatter_material.uniforms['animation_time_' + name]['value'] = value;\n };\n this.transition(set, after_animation, this);\n }\n update_x(rerender = true) {\n const x_array = to_float_array(this.model.get('x'));\n const new_markers_number = Math.min(x_array.length, this.y.array.length);\n // If the `markers_number` changes\n if (this.markers_number != new_markers_number) {\n this.update_markers_number(new_markers_number);\n }\n [this.x, this.x_previous] = this.update_attributes('x', this.x, this.x_previous, new AttributeParameters(x_array, 1, 1));\n if (rerender)\n this.update_scene();\n }\n update_y(rerender = true) {\n const y_array = to_float_array(this.model.get('y'));\n const new_markers_number = Math.min(this.x.array.length, y_array.length);\n // If the `markers_number` changes\n if (this.markers_number != new_markers_number) {\n this.update_markers_number(new_markers_number);\n }\n [this.y, this.y_previous] = this.update_attributes('y', this.y, this.y_previous, new AttributeParameters(y_array, 1, 1));\n if (rerender)\n this.update_scene();\n }\n update_markers_number(n) {\n const old_markers_number = this.markers_number;\n this.markers_number = n;\n this.instanced_geometry.maxInstancedCount = n;\n // Increasing the number of markers, we need to update buffer sizes in\n // order to prevent buffer overflows. We assume here that\n // `update_markers_number` is called from `update_x` or `update_y` hence they\n // are already correctly sized\n // If the number of markers has decreased, no need to change the buffer sizes\n if (this.markers_number > old_markers_number) {\n this.update_color(false);\n this.update_opacity(false);\n this.update_size(false);\n this.update_rotation(false);\n this.update_selected(false);\n }\n }\n update_color(rerender = true) {\n const color_parameters = this.get_color_attribute_parameters();\n this.color = this.update_attribute('color', this.color, color_parameters);\n this.color.normalized = color_parameters.normalized;\n this.scatter_material.defines['USE_COLORMAP'] = color_parameters.use_colormap;\n this.scatter_material.needsUpdate = true;\n if (rerender)\n this.update_scene();\n }\n update_opacity(rerender = true) {\n const opacity_parameters = this.get_opacity_attribute_parameters();\n [this.opacity, this.opacity_previous] = this.update_attributes('opacity', this.opacity, this.opacity_previous, opacity_parameters);\n if (rerender)\n this.update_scene();\n }\n update_size(rerender = true) {\n const size_parameters = this.get_size_attribute_parameters();\n [this.size, this.size_previous] = this.update_attributes('size', this.size, this.size_previous, size_parameters);\n if (rerender)\n this.update_scene();\n }\n update_rotation(rerender = true) {\n const rotation_parameters = this.get_rotation_attribute_parameters();\n [this.rotation, this.rotation_previous] = this.update_attributes('rotation', this.rotation, this.rotation_previous, rotation_parameters);\n if (rerender)\n this.update_scene();\n }\n update_selected(rerender = true) {\n const selected_parameters = this.get_selected_attribute_parameters();\n this.selected = this.update_attribute('selected', this.selected, selected_parameters);\n this.scatter_material.uniforms['has_selection'].value = selected_parameters.use_selection;\n if (rerender)\n this.update_scene();\n }\n update_marker() {\n const FAST_CIRCLE = 1;\n const FAST_SQUARE = 2;\n const FAST_ARROW = 3;\n const FAST_CROSS = 4;\n const FAST_TRIANGLE_UP = 5;\n const FAST_TRIANGLE_DOWN = 6;\n const marker = this.model.get('marker');\n this.dot.type(marker);\n if (marker === 'circle') {\n // same as in ./Markers.js\n this.scatter_material.uniforms.marker_scale.value = 1 / Math.sqrt(Math.PI);\n this.scatter_material.defines['FAST_DRAW'] = FAST_CIRCLE;\n }\n if (marker === 'square') {\n this.scatter_material.uniforms.marker_scale.value = 1 / 2.;\n this.scatter_material.defines['FAST_DRAW'] = FAST_SQUARE;\n }\n if (marker === 'arrow') {\n this.scatter_material.uniforms.marker_scale.value = 2.;\n this.scatter_material.defines['FAST_DRAW'] = FAST_ARROW;\n }\n if (marker === 'cross') {\n this.scatter_material.uniforms.marker_scale.value = 3. / (2. * Math.sqrt(5.));\n this.scatter_material.defines['FAST_DRAW'] = FAST_CROSS;\n }\n if (marker === 'triangle-up') {\n this.scatter_material.uniforms.marker_scale.value = 2.;\n this.scatter_material.defines['FAST_DRAW'] = FAST_TRIANGLE_UP;\n }\n if (marker === 'triangle-down') {\n this.scatter_material.uniforms.marker_scale.value = 2.;\n this.scatter_material.defines['FAST_DRAW'] = FAST_TRIANGLE_DOWN;\n }\n this.scatter_material.needsUpdate = true;\n this.update_scene();\n }\n update_stroke() {\n const stroke = this.model.get('stroke');\n if (stroke) {\n this.scatter_material.uniforms.default_stroke_color.value = color_to_array_rgba(stroke);\n this.scatter_material.defines['HAS_DEFAULT_STROKE_COLOR'] = true;\n }\n else {\n this.scatter_material.defines['HAS_DEFAULT_STROKE_COLOR'] = false;\n }\n this.scatter_material.needsUpdate = true;\n this.update_scene();\n }\n update_stroke_width() {\n this.scatter_material.uniforms.stroke_width.value = this.model.get('stroke_width');\n this.update_scene();\n }\n update_color_map() {\n this.scatter_material.uniforms['colormap'].value = create_colormap(this.scales.color);\n if (this.scales.color) {\n const color = this.model.get('color');\n if (color) {\n let min;\n let max;\n if (this.scales.color.model.min !== null) {\n min = this.scales.color.model.min;\n }\n else {\n min = Math.min(...color);\n }\n if (this.scales.color.model.max !== null) {\n max = this.scales.color.model.max;\n }\n else {\n max = Math.max(...color);\n }\n this.scatter_material.uniforms['domain_color'].value = [min, max];\n }\n else {\n if (this.scales.color.model.min !== null && this.scales.color.model.max !== null) {\n this.scatter_material.uniforms['domain_color'].value = [this.scales.color.model.min, this.scales.color.model.max];\n }\n else {\n console.warn('no color set, and color scale does not have a min or max');\n }\n }\n }\n this.update_scene();\n }\n update_position(animate) {\n this.update_scene();\n this.invalidate_pixel_position();\n }\n // we want to compute the pixels coordinates 'lazily', since it's quite expensive for 10^6 points\n invalidate_pixel_position() {\n this.invalidated_pixel_position = true;\n }\n ensure_pixel_position() {\n if (this.invalidated_pixel_position)\n this.update_pixel_position();\n }\n update_pixel_position(animate) {\n const x_scale = this.scales.x, y_scale = this.scales.y;\n const x_data = this.model.get(\"x\");\n const y_data = this.model.get(\"y\");\n const N = Math.min(x_data.length, y_data.length);\n // this.pixel_coords = _.map(_.range(N), (i) => {\n // return [x_scale.scale(x_data[i]) + x_scale.offset,\n // y_scale.scale(y_data[i]) + y_scale.offset];\n // });\n this.pixel_x = new Float64Array(N);\n this.pixel_y = new Float64Array(N);\n for (let i = 0; i < N; i++) {\n this.pixel_x[i] = x_scale.scale(x_data[i]) + x_scale.offset;\n this.pixel_y[i] = y_scale.scale(y_data[i]) + y_scale.offset;\n }\n this.invalidated_pixel_position = false;\n }\n selector_changed(point_selector, rect_selector) {\n if (!this.trottled_selector_changed)\n this.trottled_selector_changed = _.throttle(this._real_selector_changed, 50, { leading: false });\n this.trottled_selector_changed(point_selector, rect_selector);\n }\n _real_selector_changed(point_selector, rect_selector) {\n // not sure why selection isn't working yet\n this.ensure_pixel_position();\n if (point_selector === undefined) {\n this.model.set(\"selected\", null);\n this.touch();\n return [];\n }\n const selection_mask = point_selector(this.pixel_x, this.pixel_y);\n let selected = new Uint32Array(selection_mask.length);\n let count = 0;\n const N = selection_mask.length;\n for (let i = 0; i < N; i++) {\n if (selection_mask[i]) {\n selected[count++] = i;\n }\n }\n selected = selected.slice(0, count);\n this.model.set(\"selected\", selected);\n this.touch();\n }\n set_positional_scales() {\n this.x_scale = this.scales.x;\n this.y_scale = this.scales.y;\n // If no scale for \"x\" or \"y\" is specified, figure scales are used.\n if (!this.x_scale) {\n this.x_scale = this.parent.scale_x;\n }\n if (!this.y_scale) {\n this.y_scale = this.parent.scale_y;\n }\n this.listenTo(this.x_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n const animate = true;\n this.update_position(animate);\n }\n });\n this.listenTo(this.y_scale, \"domain_changed\", function () {\n if (!this.model.dirty) {\n const animate = true;\n this.update_position(animate);\n }\n });\n }\n initialize_additional_scales() {\n const color_scale = this.scales.color;\n const size_scale = this.scales.size;\n const opacity_scale = this.scales.opacity;\n const rotation_scale = this.scales.rotation;\n // the following handlers are for changes in data that does not\n // impact the position of the elements\n if (color_scale) {\n this.listenTo(color_scale, 'all', this.update_color_map);\n this.listenTo(this.model, 'change:color', this.update_color_map);\n this.update_color_map();\n }\n if (size_scale) {\n this.listenTo(size_scale, \"domain_changed\", () => {\n this.update_scene();\n });\n }\n if (opacity_scale) {\n this.listenTo(opacity_scale, \"domain_changed\", () => {\n this.update_scene();\n });\n }\n if (rotation_scale) {\n this.listenTo(rotation_scale, \"domain_changed\", () => {\n this.update_scene();\n });\n }\n }\n set_ranges() {\n const x_scale = this.scales.x, y_scale = this.scales.y, size_scale = this.scales.size, opacity_scale = this.scales.opacity, skew_scale = this.scales.skew, rotation_scale = this.scales.rotation;\n if (x_scale) {\n x_scale.set_range(this.parent.padded_range(\"x\", x_scale.model));\n }\n if (y_scale) {\n y_scale.set_range(this.parent.padded_range(\"y\", y_scale.model));\n }\n if (size_scale) {\n size_scale.set_range([0, this.model.get(\"default_size\")]);\n }\n if (opacity_scale) {\n opacity_scale.set_range([0.2, 1]);\n }\n if (skew_scale) {\n skew_scale.set_range([0, 1]);\n }\n if (rotation_scale) {\n rotation_scale.set_range([0, Math.PI]); // TODO: this mirrors the 180 from the normal scatter, but why not 360?\n }\n }\n transition(f, on_done, context) {\n // this is a copy from ipyvolume, maybe better to use tween, and do the rerendering\n // at the figure level (say if multiple scatter's want to rerender)\n const that = this;\n const Transition = function () {\n //this.objects = []\n this.time_start = (new Date()).getTime();\n this.duration = that.parent.model.get(\"animation_duration\");\n this.cancelled = false;\n this.called_on_done = false;\n this.set = function (obj) {\n this.objects.push(obj);\n };\n this.is_done = function () {\n const dt = (new Date()).getTime() - this.time_start;\n return (dt >= this.duration) || this.cancelled;\n };\n this.cancel = function () {\n this.cancelled = true;\n },\n this.update = function () {\n if (this.cancelled)\n return;\n const dt = ((new Date()).getTime() - this.time_start) / this.duration;\n const u = Math.min(1, dt);\n f.apply(context, [u]);\n if (dt >= 1 && !this.called_on_done) {\n this.called_on_done = true;\n on_done.apply(context);\n }\n that.update_scene();\n };\n if (!this.duration) {\n f.apply(context, [1]);\n on_done.apply(context);\n that.update_scene();\n }\n else {\n that.transitions.push(this);\n }\n };\n return new Transition();\n }\n draw_legend(elem, x_disp, y_disp, inter_x_disp, inter_y_disp) {\n this.legend_el = elem.selectAll(\".legend\" + this.uuid)\n .data([{}]);\n const colors = this.model.get(\"colors\"), len = colors.length;\n const that = this;\n const rect_dim = inter_y_disp * 0.8;\n const el_added = this.legend_el.enter()\n .append(\"g\")\n .attr(\"class\", \"legend\" + this.uuid)\n .attr(\"transform\", function (d, i) {\n return \"translate(0, \" + (i * inter_y_disp + y_disp) + \")\";\n });\n this.draw_legend_elements(el_added, rect_dim);\n this.legend_el.append(\"text\")\n .attr(\"class\", \"legendtext\")\n .attr(\"x\", rect_dim * 1.2)\n .attr(\"y\", rect_dim / 2)\n .attr(\"dy\", \"0.35em\")\n .text(function (d, i) {\n return that.model.get(\"labels\")[i];\n })\n .style(\"fill\", function (d, i) {\n return colors[i % len];\n });\n const max_length = d3.max(this.model.get(\"labels\"), function (d) {\n return d.length;\n });\n this.legend_el.exit().remove();\n return [1, max_length];\n }\n draw_legend_elements(elements_added, rect_dim) {\n const colors = this.model.get(\"colors\"), stroke = this.model.get(\"stroke\"), fill = this.model.get(\"fill\");\n elements_added.append(\"path\")\n .attr(\"transform\", function (d, i) {\n return \"translate( \" + rect_dim / 2 + \", \" + rect_dim / 2 + \")\";\n })\n .attr(\"d\", this.dot.size(64))\n .style(\"fill\", fill ? colors[0] : 'none')\n .style(\"stroke\", stroke ? stroke : colors[0]);\n }\n update_legend() {\n if (this.legend_el) {\n const colors = this.model.get(\"colors\"), stroke = this.model.get(\"stroke\"), fill = this.model.get(\"fill\");\n this.legend_el.select(\"path\")\n .style(\"fill\", fill ? colors[0] : 'none')\n .style(\"stroke\", stroke ? stroke : colors[0]);\n this.legend_el.select(\"text\")\n .style(\"fill\", fill ? colors[0] : \"none\");\n if (this.legend_el) {\n this.legend_el.select(\"path\")\n .attr(\"d\", this.dot.type(this.model.get(\"marker\")));\n }\n }\n }\n relayout() {\n this.set_ranges();\n this.update_position();\n }\n compute_view_padding() {\n //This function computes the padding along the x and y directions.\n //The value is in pixels.\n const x_padding = Math.sqrt(this.model.get(\"default_size\")) / 2 + 1.0;\n if (x_padding !== this.x_padding || x_padding !== this.y_padding) {\n this.x_padding = x_padding;\n this.y_padding = x_padding;\n this.trigger(\"mark_padding_updated\");\n }\n }\n draw(animate) { }\n clear_style(style_dict, indices, elements) { }\n set_default_style(indices, elements) { }\n set_style_on_elements(style, indices, elements) { }\n}\nexports.ScatterGL = ScatterGL;\n;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlckdMLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjYXR0ZXJHTC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsaUNBQThCO0FBQzlCLHVDQUF5QjtBQUN6QixtREFBcUM7QUFDckMsOENBQWdDO0FBQ2hDLG1DQUFtQztBQUVuQyw2Q0FBK0I7QUFJL0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUVoQyxNQUFNLGNBQWMsR0FBRyxVQUFTLEtBQVU7SUFDdEMsSUFBSSxLQUFLLFlBQVksWUFBWTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hELElBQUksT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtRQUM5QyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLElBQUksT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sT0FBTyxDQUFDO0tBQ2xCO0lBQ0QsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLFVBQVMsS0FBSyxFQUFFLGFBQWM7SUFDdEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxJQUFJLGFBQWEsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlELElBQUcsVUFBVSxJQUFJLE1BQU0sRUFBRTtRQUNyQixPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFB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","export default \"#include <fog_pars_vertex>\\n#include <scales>\\n\\nuniform mat4 projectionMatrix;\\nuniform mat4 modelViewMatrix;\\n\\n // for animation, all between 0 and 1\\nuniform float animation_time_x;\\nuniform float animation_time_y;\\nuniform float animation_time_z;\\nuniform float animation_time_size;\\nuniform float animation_time_rotation;\\nuniform float animation_time_opacity;\\n\\n#ifdef HAS_DEFAULT_STROKE_COLOR\\nuniform vec4 default_stroke_color;\\n#endif\\n\\nuniform bool has_selection;\\nuniform bool has_hover;\\n\\n// maybe faster to use #IFDEFS\\nuniform bool has_selected_fill;\\nuniform vec4 selected_fill;\\nuniform bool has_selected_stroke;\\nuniform vec4 selected_stroke;\\nuniform bool has_selected_opacity;\\nuniform float selected_opacity;\\n\\nuniform bool has_unselected_fill;\\nuniform vec4 unselected_fill;\\nuniform bool has_unselected_stroke;\\nuniform vec4 unselected_stroke;\\nuniform bool has_unselected_opacity;\\nuniform float unselected_opacity;\\n\\n\\nuniform bool has_hovered_fill;\\nuniform vec4 hovered_fill;\\nuniform bool has_hovered_stroke;\\nuniform vec4 hovered_stroke;\\nuniform bool has_hovered_opacity;\\nuniform float hovered_opacity;\\n\\nuniform bool has_unhovered_fill;\\nuniform vec4 unhovered_fill;\\nuniform bool has_unhovered_stroke;\\nuniform vec4 unhovered_stroke;\\nuniform bool has_unhovered_opacity;\\nuniform float unhovered_opacity;\\n\\nuniform vec2 domain_x;\\nuniform vec2 domain_y;\\nuniform vec2 domain_z;\\nuniform vec2 domain_size;\\nuniform vec2 domain_rotation;\\nuniform vec2 domain_opacity;\\n\\nuniform vec2 range_x;\\nuniform vec2 range_y;\\nuniform vec2 range_z;\\nuniform vec2 range_size;\\nuniform vec2 range_rotation;\\nuniform vec2 range_opacity;\\n\\nuniform bool fill;\\nuniform float stroke_width;\\nuniform float marker_scale;\\n\\nvarying vec4 v_fill_color;\\nvarying vec4 v_stroke_color;\\nvarying float v_inner_size;\\nvarying float v_outer_size;\\nvarying vec2 v_pixel;\\n\\nattribute vec3 position;\\nattribute vec2 uv;\\n\\nattribute float x;\\nattribute float x_previous;\\nattribute float y;\\nattribute float y_previous;\\n\\nattribute float size;\\nattribute float size_previous;\\n\\nattribute float rotation;\\nattribute float rotation_previous;\\n\\nattribute float opacity;\\nattribute float opacity_previous;\\n\\n// Boolean or int not supported for attributes, using a float instead\\nattribute float selected;\\n\\nuniform sampler2D colormap;\\nuniform vec2 domain_color;\\n\\n#ifdef USE_COLORMAP\\nattribute float color;\\n#else\\nattribute vec3 color;\\n#endif\\n\\n\\n#define SCALE_X(x) scale_transform_linear(x, range_x, domain_x)\\n#define SCALE_Y(x) scale_transform_linear(x, range_y, domain_y)\\n#define SCALE_SIZE(x) scale_transform_linear(x, range_size, domain_size)\\n#define SCALE_ROTATION(x) scale_transform_linear(x, range_rotation, domain_rotation)\\n#define SCALE_OPACITY(x) scale_transform_linear(x, range_opacity, domain_opacity)\\n\\nvec3 rotate_xy(vec3 x, float angle) {\\n float sina = sin(angle);\\n float cosa = cos(angle);\\n mat2 m = mat2(cosa, -sina, sina, cosa);\\n return vec3(m * x.xy, x.z);\\n}\\n\\nvoid main(void) {\\n\\n vec3 animation_time = vec3(animation_time_x, animation_time_y, animation_time_z);\\n\\n\\n vec3 domain_offset = vec3(domain_x.x, domain_y.x, domain_z.x);\\n vec3 domain_scale = vec3(domain_x.y, domain_y.y, domain_z.y) - domain_offset;\\n vec3 range_offset = vec3(range_x.x, range_y.x, range_z.x);\\n vec3 range_scale = vec3(range_x.y, range_y.y, range_z.y) - range_offset;\\n\\n vec3 center = mix(vec3(x_previous, y_previous, 0), vec3(x, y, 0), animation_time);\\n\\n // vec3 center_normalized = (center - domain_offset) / domain_scale;\\n // vec3 center_pixels = ((center_normalized*2.)-0.) * range_scale + range_offset;\\n // times 2 because the normalized coordinates go from [-1, 1]\\n vec3 center_pixels = vec3(SCALE_X(center.x), SCALE_Y(center.y), 0) * 2.;\\n\\n\\n // times 4 because of the normalized coordinates, and radius vs diameter use\\n float marker_size = sqrt(mix(SCALE_SIZE(size_previous), SCALE_SIZE(size), animation_time_size)) * marker_scale * 4.;\\n // we draw larger than the size for the stroke_width (on both side)\\n\\n // `v_inner_size` is the marker \\\"radius\\\" without the stroke, `v_outer_size` is the marker \\\"radius\\\" with the stroke\\n v_inner_size = marker_size * 0.5 - stroke_width;\\n v_outer_size = marker_size * 0.5 + stroke_width;\\n\\n // `full_size` is the marker \\\"diameter\\\" with the stroke\\n float full_size = marker_size + 2.0 * stroke_width;\\n\\n // `v_pixel` is the pixel position relatively to the marker,\\n // e.g. vec2(0.) would be the center of the square marker\\n // e.g. vec2(0.5 * full_size) would be the top-right pixel of the square marker\\n v_pixel = (uv - 0.5) * (full_size);\\n\\n float angle = SCALE_ROTATION(mix(rotation_previous, rotation, animation_time_rotation));\\n vec3 model_pos = rotate_xy(position, 1.) * full_size + center_pixels;\\n\\n#ifdef USE_COLORMAP\\n float color_index = (color - domain_color.x) / (domain_color.y - domain_color.x);\\n vec4 color_rgba = texture2D(colormap, vec2(color_index, 0));\\n#else\\n vec4 color_rgba = vec4(color, 1.0);\\n#endif\\n\\n v_fill_color = color_rgba;\\n v_stroke_color = color_rgba;\\n\\n#ifdef HAS_DEFAULT_STROKE_COLOR\\n v_stroke_color = default_stroke_color;\\n#endif\\n\\n float opacity_value = SCALE_OPACITY(mix(opacity_previous, opacity, animation_time_opacity));\\n v_fill_color.a *= opacity_value;\\n v_stroke_color.a *= opacity_value;\\n\\n if(has_selection) {\\n if(has_selected_fill && selected > 0.5 )\\n v_fill_color = selected_fill;\\n if(has_unselected_fill && selected < 0.5 )\\n v_fill_color = unselected_fill;\\n if(has_selected_stroke && selected > 0.5 )\\n v_stroke_color = selected_stroke;\\n if(has_unselected_stroke && selected < 0.5 )\\n v_stroke_color = unselected_stroke;\\n if(has_selected_opacity && selected > 0.5 ) {\\n v_stroke_color.a *= selected_opacity;\\n v_fill_color.a *= selected_opacity;\\n }\\n if(has_unselected_opacity && selected < 0.5 ) {\\n v_stroke_color.a *= unselected_opacity;\\n v_fill_color.a *= unselected_opacity;\\n }\\n }\\n\\n v_fill_color.rgb *= v_fill_color.a;\\n v_stroke_color.rgb *= v_stroke_color.a;\\n\\n // color_rgba = has_selection && has_selected_color ? (selected > 0.5 ? selected_color : unselected_color) : color_rgba;\\n gl_Position = projectionMatrix * vec4(rotate_xy(position, angle) * full_size, 1.0) +\\n projectionMatrix * modelViewMatrix * vec4(center_pixels + vec3(0., 0., 0.), 1.0);\\n}\\n\"","export default \"#include <fog_pars_fragment>\\n#include <alphamap_pars_fragment>\\n\\nprecision highp float;\\nprecision highp int;\\n\\n#define FAST_CIRCLE 1\\n#define FAST_SQUARE 2\\n#define FAST_ARROW 3\\n#define FAST_CROSS 4\\n#define FAST_TRIANGLE_UP 5\\n#define FAST_TRIANGLE_DOWN 6\\n\\n// This parameter is used for reducing aliasing\\n#define SMOOTH_PIXELS 1.0\\n\\n// ANGLE_X = X * PI / 180.\\n#define ANGLE_20 0.3490658503988659\\n#define ANGLE_60 1.0471975511965976\\n\\nvarying vec4 v_fill_color;\\nvarying vec4 v_stroke_color;\\nvarying float v_inner_size;\\nvarying float v_outer_size;\\nvarying vec2 v_pixel;\\n\\nuniform float stroke_width;\\n\\n\\n/*\\n * Rotate a point in the 2-D plane, given an angle in radians\\n */\\nvec2 rotate_xy(vec2 x, float angle) {\\n float sina = sin(angle);\\n float cosa = cos(angle);\\n mat2 m = mat2(cosa, -sina, sina, cosa);\\n return m * x.xy;\\n}\\n\\n/*\\n * Returns 1.0 if pixel inside of a circle (0.0 otherwise) given the circle radius and the\\n * pixel position.\\n */\\nfloat smooth_circle(in float radius, in vec2 pixel_position) {\\n // This function does not use the ellipse function for optimization purpose\\n // Circle equation: x^2 + y^2 = radius^2\\n float d = dot(pixel_position, pixel_position);\\n float r1 = pow(radius - SMOOTH_PIXELS, 2.0);\\n float r2 = pow(radius + SMOOTH_PIXELS, 2.0);\\n return 1.0 - smoothstep(r1, r2, d);\\n}\\n\\n/*\\n * Returns 1.0 if pixel inside of an ellipse (0.0 otherwise) given the ellipse radius and the\\n * pixel position.\\n */\\nfloat smooth_ellipse(in float a, in float b, in vec2 pixel_position) {\\n // Ellipse equation: b^2 * x^2 + a^2 * y^2 = a^2 * b^2\\n float r_x = pow(a, 2.0);\\n float r_y = pow(b, 2.0);\\n float d = r_y * pow(pixel_position.x, 2.0) + r_x * pow(pixel_position.y, 2.0);\\n float r1 = pow(a - SMOOTH_PIXELS, 2.0) * pow(b - SMOOTH_PIXELS, 2.0);\\n float r2 = pow(a + SMOOTH_PIXELS, 2.0) * pow(b + SMOOTH_PIXELS, 2.0);\\n return 1.0 - smoothstep(r1, r2, d);\\n}\\n\\n/*\\n * Returns 1.0 if pixel inside of a rectangle (0.0 otherwise) given the rectangle half-size\\n * on the x and y axes and the pixel position.\\n */\\nfloat smooth_rectangle(in vec2 size, in vec2 pixel_position) {\\n vec2 rec = smoothstep(vec2(-SMOOTH_PIXELS), vec2(SMOOTH_PIXELS), size - abs(pixel_position));\\n return rec.x * rec.y;\\n}\\n\\n/*\\n * Returns 1.0 if pixel inside of a rectangle (0.0 otherwise) given the rectangle half-size\\n * on the x and y axes and the pixel position.\\n */\\nfloat rectangle(in vec2 size, in vec2 pixel_position) {\\n vec2 rec = step(0.0, size - abs(pixel_position));\\n return rec.x * rec.y;\\n}\\n\\n/*\\n * Returns 1.0 if pixel inside of a square (0.0 otherwise) given the square half-size\\n * and the pixel position.\\n */\\nfloat smooth_square(in float size, in vec2 pixel_position) {\\n return smooth_rectangle(vec2(size), pixel_position);\\n}\\n\\nfloat smooth_isosceles_triangle(in float angle, in float height, in vec2 pixel_position) {\\n float half_angle = angle / 2.0;\\n\\n // The triangle center is on vec2(0.0, -height/3.0)\\n vec2 translated_pixel = vec2(pixel_position.x, pixel_position.y - height / 3.0);\\n\\n vec2 pixel_left = rotate_xy(translated_pixel, -half_angle);\\n vec2 pixel_right = rotate_xy(translated_pixel, half_angle);\\n\\n float half_height = height * 0.5;\\n\\n float half_bottom = half_height * tan(half_angle);\\n\\n return smoothstep(-SMOOTH_PIXELS, SMOOTH_PIXELS, half_bottom + pixel_left.x) *\\n smoothstep(-SMOOTH_PIXELS, SMOOTH_PIXELS, half_bottom - pixel_right.x) *\\n smoothstep(-SMOOTH_PIXELS, SMOOTH_PIXELS, translated_pixel.y + half_height);\\n}\\n\\n\\n/*\\n * Returns 1.0 if pixel inside of a cross shape (0.0 otherwise) given the cross half-size\\n * on the x and y axes and the pixel position.\\n */\\nfloat cross(in vec2 size, in vec2 pixel_position) {\\n float cross_shape = rectangle(size.xy, pixel_position) +\\n rectangle(size.yx, pixel_position);\\n return clamp(cross_shape, 0.0, 1.0);\\n}\\n\\n\\nvoid main(void) {\\n // fill_weight and stroke_weight are color factors\\n // e.g. if fill_weight == 1.0 then the pixel color will be v_fill_color\\n // e.g. if stroke_weight == 1.0 then the pixel color will be v_stroke_color\\n float fill_weight = 0.0;\\n float stroke_weight = 0.0;\\n\\n // Note for the reader: In the following code,\\n // - `1.0` -> True\\n // - `0.0` -> False\\n // - `1.0 - A` -> NOT A\\n // - `A + B` -> A OR B\\n // - `A * B` -> A AND B\\n\\n float inner_shape = 0.0;\\n float outer_shape = 0.0;\\n\\n#if FAST_DRAW == FAST_CIRCLE\\n\\n inner_shape = smooth_circle(v_inner_size, v_pixel);\\n outer_shape = smooth_circle(v_outer_size, v_pixel);\\n\\n#elif FAST_DRAW == FAST_SQUARE\\n\\n inner_shape = smooth_square(v_inner_size, v_pixel);\\n outer_shape = 1.0; // Always in the outer_shape\\n\\n#elif FAST_DRAW == FAST_CROSS\\n\\n float r = v_outer_size / 3.0;\\n\\n inner_shape = cross(vec2(v_inner_size, r - 2.0 * stroke_width), v_pixel);\\n outer_shape = cross(vec2(r, v_outer_size), v_pixel);\\n\\n#elif FAST_DRAW == FAST_ARROW\\n\\n inner_shape = smooth_isosceles_triangle(ANGLE_20, v_inner_size, v_pixel);\\n outer_shape = smooth_isosceles_triangle(ANGLE_20, v_outer_size, v_pixel);\\n\\n#elif FAST_DRAW == FAST_TRIANGLE_UP\\n\\n inner_shape = smooth_isosceles_triangle(ANGLE_60, v_inner_size, v_pixel);\\n outer_shape = smooth_isosceles_triangle(ANGLE_60, v_outer_size, v_pixel);\\n\\n#elif FAST_DRAW == FAST_TRIANGLE_DOWN\\n\\n vec2 reversed_pixel = vec2(v_pixel.x, -v_pixel.y);\\n\\n inner_shape = smooth_isosceles_triangle(ANGLE_60, v_inner_size, reversed_pixel);\\n outer_shape = smooth_isosceles_triangle(ANGLE_60, v_outer_size, reversed_pixel);\\n\\n#endif\\n\\n // `inner_shape` is the shape without the stroke, `outer_shape` is the shape with the stroke\\n // note that the stroke is always drawn, only that it has the `v_fill_color` if stroke is None\\n fill_weight = inner_shape;\\n stroke_weight = (1.0 - inner_shape) * outer_shape;\\n\\n#if !FILL\\n fill_weight = 0.0;\\n#endif\\n\\n gl_FragColor = v_fill_color * fill_weight + v_stroke_color * stroke_weight;\\n}\\n\"","\"use strict\";\n/* Copyright 2015 Bloomberg Finance L.P.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MarkModel_1 = require(\"./MarkModel\");\nconst serialize = __importStar(require(\"./serialize\"));\nclass ScatterGLModel extends MarkModel_1.MarkModel {\n defaults() {\n return Object.assign({}, MarkModel_1.MarkModel.prototype.defaults(), { _model_name: \"ScatterGLModel\", _view_name: \"ScatterGL\", x: [], y: [], color: null, skew: null, marker: \"circle\", stroke: null, stroke_width: 1.5, default_skew: 0.5, default_size: 64, names: [], display_names: true, fill: true, drag_color: null, drag_size: 5.0, names_unique: true });\n }\n initialize(attributes, options) {\n super.initialize(attributes, options);\n this.update_domains();\n }\n update_domains() {\n // color scale needs an issue in DateScaleModel to be fixed. It\n // should be moved here as soon as that is fixed.\n var scales = this.get(\"scales\");\n for (var key in scales) {\n if (scales.hasOwnProperty(key) && key != \"color\") {\n var scale = scales[key];\n if (!this.get(\"preserve_domain\")[key]) {\n scale.compute_and_set_domain(this.get(key), this.model_id + key);\n }\n else {\n scale.del_domain([], this.model_id + key);\n }\n }\n }\n }\n}\nScatterGLModel.serializers = Object.assign({}, MarkModel_1.MarkModel.serializers, { x: serialize.array_or_json, y: serialize.array_or_json, color: serialize.array_or_json, size: serialize.array_or_json, rotation: serialize.array_or_json, opacity: serialize.array_or_json, default_opacities: serialize.array_or_json });\nexports.ScatterGLModel = ScatterGLModel;\n;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlckdMTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2NhdHRlckdMTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7Ozs7Ozs7OztBQUVILDJDQUF3QztBQUN4Qyx1REFBeUM7QUFFekMsTUFBYSxjQUFlLFNBQVEscUJBQVM7SUFFekMsUUFBUTtRQUNKLHlCQUFXLHFCQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUNyQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLFVBQVUsRUFBRSxXQUFXLEVBQ3ZCLENBQUMsRUFBRSxFQUFFLEVBQ0wsQ0FBQyxFQUFFLEVBQUUsRUFDTCxLQUFLLEVBQUUsSUFBSSxFQUNYLElBQUksRUFBRSxJQUFJLEVBQ1YsTUFBTSxFQUFFLFFBQVEsRUFDaEIsTUFBTSxFQUFFLElBQUksRUFDWixZQUFZLEVBQUUsR0FBRyxFQUNqQixZQUFZLEVBQUUsR0FBRyxFQUNqQixZQUFZLEVBQUUsRUFBRSxFQUNoQixLQUFLLEVBQUUsRUFBRSxFQUNULGFBQWEsRUFBRSxJQUFJLEVBQ25CLElBQUksRUFBRSxJQUFJLEVBQ1YsVUFBVSxFQUFFLElBQUksRUFDaEIsU0FBUyxFQUFFLEdBQUcsRUFDZCxZQUFZLEVBQUUsSUFBSSxJQUNwQjtJQUNOLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjO1FBQ1YsK0RBQStEO1FBQy9ELGlEQUFpRDtRQUNqRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFO1lBQ3BCLElBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFO2dCQUM3QyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2xDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7aUJBQ3BFO3FCQUFNO29CQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7aUJBQzdDO2FBQ0o7U0FDSjtJQUNMLENBQUM7O0FBRU0sMEJBQVcscUJBQU8scUJBQVMsQ0FBQyxXQUFXLElBQzFDLENBQUMsRUFBRSxTQUFTLENBQUMsYUFBYSxFQUMxQixDQUFDLEVBQUUsU0FBUyxDQUFDLGFBQWEsRUFDMUIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxhQUFhLEVBQzlCLElBQUksRUFBRSxTQUFTLENBQUMsYUFBYSxFQUM3QixRQUFRLEVBQUUsU0FBUyxDQUFDLGFBQWEsRUFDakMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxhQUFhLEVBQ2hDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxhQUFhLElBQzdDO0FBckRMLHdDQXNEQztBQUFBLENBQUMifQ=="],"sourceRoot":""}